电话号码的字母组合 leetcode 17

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;
    }
};
posted @ 2020-01-02 15:33  谋莽台  阅读(135)  评论(0编辑  收藏  举报