题目

etter-combinations-of-a-phone-number/


算法

o(n)

  • 0~9中每个数字代表若干个字母,然后给一串数字,求出所有的排列组合
  • 建立字典,保存每个数字所代表的字符串
  • 变量level:记录当前生成的字符串的个数

代码

* 递归解法


class Solution{
public:
    vector<string> letterCominations(string digits){
        vector<string> res;
        if(digits.empty())  return res;
        string dict[]={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
        letterCominationsDFS(digits,dict,0,"",res);
        return res;
    }
private:
    void letterCominationsDFS(string digits,string dict[],int level,string out,vector<string>& res){
        if(level==digits.size())  res.push_back(out);
        else{
            string str=dict[digits[level]-'2'];
            for(int i=0;i<str.size();++i){
                out.push_back(str[i]);
                letterCominationsDFS(digits,dict,level,,out,res);
                out.pop_back();
            }
        }
    }
};

* 迭代的算法


class Solution{
public:
    vector<string>  letterCombinations(string digits){
        vector<string>  res;
        if(digits.empty())  return res;
        string dict[]={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
        res.push_back("");
        for(int i=0;i<digits.size();++i){
            int n=res.size();
            string str=dict[digits[i]-'2'];
            for(int j=0;j<n;j++){
                string tmp=res.front();
                res.erase(res.begin());
                for(int k=0;k<str.size();++k)
                    res.push_back(tmp+str[k]);
            }
        }

        return res;
    }
};

results matching ""

    No results matching ""