1. 程式人生 > >LeetCode 17. 電話號碼的字母組合(C++)

LeetCode 17. 電話號碼的字母組合(C++)

給定一個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。

給出數字到字母的對映如下(與電話按鍵相同)。注意 1 不對應任何字母。

示例:

輸入:"23"
輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

說明: 儘管上面的答案是按字典序排列的,但是你可以任意選擇答案輸出的順序。

C++

class Solution {
public:
    vector<string> letterCombinations(string digits) 
    {
        int n=digits.length();
        vector<string> ans;
        if(n==0)
        {
            return ans;
        }
        vector<string> res{""};
        for(int i=0;i<n;i++)
        {
            int m=res.size();
            switch(digits[i])
            {
                case '2':
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res[j]+='a';
                        res[j+m]+='b';
                        res[j+m*2]+='c';
                    }
                    break;
                case '3':
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res[j]+='d';
                        res[j+m]+='e';
                        res[j+m*2]+='f';
                    }
                    break;
                case '4':
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res[j]+='g';
                        res[j+m]+='h';
                        res[j+m*2]+='i';
                    }
                    break;
                case '5':
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res[j]+='j';
                        res[j+m]+='k';
                        res[j+m*2]+='l';
                    }
                    break;
                case '6':
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res[j]+='m';
                        res[j+m]+='n';
                        res[j+m*2]+='o';
                    }
                    break;
                case '7':
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res[j]+='p';
                        res[j+m]+='q';
                        res[j+m*2]+='r';
                        res[j+m*3]+='s';
                    }
                    break;
                case '8':
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res[j]+='t';
                        res[j+m]+='u';
                        res[j+m*2]+='v';
                    }
                    break;
                case '9':
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res.push_back(res[j]);
                    }
                    for(int j=0;j<m;j++)
                    {
                        res[j]+='w';
                        res[j+m]+='x';
                        res[j+m*2]+='y';
                        res[j+m*3]+='z';
                    }  
                    break;
            }            
        }
        return res;        
    }
};