1.解题思路
利用回溯法框架
2.代码及注释
class Solution { public: //定义全局变量phone记录各个(按键-2)所对应的字符串 vector<string>phone {"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; //定义全局变量v为结果数组,初始化为空的容器 vector<string> v {}; //回溯法遍历 digits为按键字符串,ans为进行到当前第k个按键所对应的当前字符串,k表示为第几个按键 void back_track(string digits,string ans,int k){ //如果当前进行到第digits.size()个按键则说明已经组合完成,添加至v中。 if(k==digits.size()){ v.push_back(ans); }else{ //num代表所按的按键对应于phone的第几个字符串,需要-2 int num = digits[k]-‘0‘-2; //保存ans用于下面ans改变后恢复 string t = ans; //遍历 for(int i=0;i<phone[num].size();i++){ ans+=phone[num][i]; back_track(digits,ans,k+1); ans=t; } } return ; } vector<string> letterCombinations(string digits) { if(digits.size()==0) return v; back_track(digits,"",0); return v; } };
原文:https://www.cnblogs.com/moumangtai/p/12133250.html