Q17 Letter Combinations of a Phone Number

问题:here
代码:here
思路:
这道题的思路就像是数数,对,比如15,我就从1,2,3,…一直遍历的15;但是我们这道题的进位方法和十进制不一样,要根据每个按键中字母的数量来控制进位。下面用动图来说明了程序中遍历顺序数数的关系:)
这里写图片描述
接下来讲一个比较常规的方法:递归。我们一个一个地添加输入的按键,每次添加都把原来存在的组合和新的按键上的字母两两组合,就像树根的生长一样。代码如下:

    vector<string> addLetter(vector<string> input, char digit){
        vector<string> strs = { "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };
        int loc = digit - '2';
        vector<string> result;
        for (int i = 0; i < strs[loc].size(); i++){
            if (input.size() == 0){
                string temp;
                temp += strs[loc][i];
                result.push_back(temp);
            }
            else{
                for (int j = 0; j < input.size(); j++){
                    string temp;
                    temp += input[j] + strs[loc][i];
                    result.push_back(temp);
                }
            }
        }

        return result;
    }

    vector<string> letterCombinations(string digits){
        vector<string> result;
        int digits_len = digits.size();
        if (digits_len == 0) return result;

        for (int i = 0; i < digits_len; i++){
            result = addLetter(result, digits[i]);
        }

        return result;
    }

猜你喜欢

转载自blog.csdn.net/m0_37518259/article/details/80698606