Leetcode 17 电话号码的字母组合

在这里插入图片描述
首先你不知道有多少位数,因此用循环不知道嵌套多少层,那么就不能使用循环嵌套!
第一种:recursion

class Solution {
public:
    vector<string> letterCombinations(string digits) 
    {
        vector<string> v;
        if(digits.empty()) return v;
        string tmp[]= {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
        
        int index = 0;
        string str = "";
        recursive(digits,index,tmp,v,str);
        
        
        
        return v;
    }
    
    void recursive (string digits,int charsSize, string tmp[] ,vector<string> &v,string str)
        {   
            if(charsSize == digits.size())
            { 
                v.push_back(str);
                return;
            }
            string num2chars = tmp[digits[charsSize]-'0'];//abc  ,def
            for(int i=0;i<num2chars.size();++i)
            {
                recursive(digits,charsSize+1,tmp,v,str+string(1,num2chars[i]));
            }
        }
    
};

在这里插入图片描述
第二种:入队列出队列

class Solution {
public:
    vector<string> letterCombinations(string digits) {
        vector<string> ans;
        if(digits.empty()) return ans;
        
        string tmp[]= {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
        
        queue<string> que;
        que.push("");
        
        for(int i=0;i<digits.size();++i)
        {
            string str = tmp[digits[i]-'0'];//,abc,pqrs
            
            int queLength=que.size();
            for(int k=0;k<queLength;k++)
            {
                string now = que.front();
                que.pop();
                for(int j=0;j<str.size();j++)
                {
                    que.push(now+str[j]);
                }
            }
            
            
            
        }//1X3,3X3.......
        while(!que.empty())
        {
            ans.push_back(que.front());
            que.pop();
        }
        
        return ans;
        
        
    }
};

猜你喜欢

转载自blog.csdn.net/qq_39871498/article/details/89088780