leetcode 17电话号码的字母组合

 与子集70?类似,子集每次两个分支,本题每次k个分支,子集是第一次不push第二次push元素,本题是每次都push元素,因此,本题答案的长度都为k,子集题目为各种组合;

/**
res,level,nums,i,dict
**/

class Solution {
public:
    vector<string> letterCombinations(string digits) {
        len=digits.length();
        if(len==0) return {};
        //字母转化为数字
        for(int i=0;i<len;i++){
            int num=digits[i]-'0';
            nums.push_back(num);
        }
        vector<string> res;
        string level;
        dfs(0,res,level);
        return res;
    }
    //建立递归函数,从第一个号码开始递归,到最后一个号码结束;
    void dfs(int i,vector<string>&res,string& level){
        //递归边界
        if(i>=len){
            res.push_back(level);return;
        }
        //递归表达式,选择第i个元素
        string cur_str=dict[nums[i]];
        for(int k=0;k<cur_str.length();k++){
            level.push_back(cur_str[k]);
            dfs(i+1,res,level);
            level.pop_back();
        }
    }

private:
    int len;
    vector<int> nums;
    vector<string> dict={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
};

 

posted @ 2019-05-25 21:17  Joel_Wang  阅读(375)  评论(0编辑  收藏  举报