LeetCode Day15 letter-combinations-of-a-phone-number

方案一、递归

class Solution {
public:
    vector<string> letterCombinations(string digits) {
        if (digits.empty()) return {};
        string dict[] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        vector<string> res;
        lettercombinations(digits,res,0,"",dict);
        return res;
    }
    void lettercombinations(string digits,vector<string> &res,int level,string tmp,string dict[]){  //一定要使用res的引用
        if(digits.size()==level) {res.push_back(tmp);return;}
        string str=dict[digits[level]-'0'];
        for(int i=0;i<str.size();i++){
            lettercombinations(digits,res,level+1,tmp+str[i],dict);//不改变当前tmp,也可以push_back后面需要pop_back
        }  
    }
};

方案二、循环

class Solution {
public:
    vector<string> letterCombinations(string digits) {
        if (digits.empty()) return {};
        string dict[] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        vector<string> res{""};
        //cout<<res.size()<<endl;
        for(int i=0;i<digits.size();i++){
            string str=dict[digits[i]-'0'];
            int num=res.size();
            for(int n=0;n<num;n++){
                string tmp=res.front(); //取出第一个元素
                res.erase(res.begin()); //删掉第一个元素
                for(int k=0;k<str.size();k++){
                    res.push_back(tmp+str[k]);  //将取出的第一个元素与新字符串组合后放在res后面
                }
            }
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_41394379/article/details/83087431