• [LintCode] Letter Combinations of a Phone Number *的字母组合


    Given a digit string, return all possible letter combinations that the number could represent.

    A mapping of digit to letters (just like on the telephone buttons) is given below.

    Cellphone

     Notice

    Although the above answer is in lexicographical order, your answer could be in any order you want.

    Example

    Given "23"

    Return["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]

     

    LeetCode上的原题,请参见我之前的博客Letter Combinations of a Phone Number

    解法一:

    class Solution {
    public:
        /**
         * @param digits A digital string
         * @return all posible letter combinations
         */
        vector<string> letterCombinations(string& digits) {
            if (digits.empty()) return {};
            vector<string> res;
            vector<string> v{"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
            helper(digits, v, 0, "", res);
            return res;
        }
        void helper(string& digits, vector<string>& v, int level, string out, vector<string>& res) {
            if (level == digits.size()) {
                res.push_back(out);
                return;
            }
            string t = v[digits[level] - '0'];
            for (int i = 0; i < t.size(); ++i) {
                out.push_back(t[i]);
                helper(digits, v, level + 1, out, res);
                out.pop_back();
            }
        }
    };

    解法二:

    class Solution {
    public:
        /**
         * @param digits A digital string
         * @return all posible letter combinations
         */
        vector<string> letterCombinations(string& digits) {
            if (digits.empty()) return {};
            vector<string> res{""};
            vector<string> v{"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
            for (int i = 0; i < digits.size(); ++i) {
                string str = v[digits[i] - '0'];
                int n = res.size();
                for (int j = 0; j < n; ++j) {
                    string t = res.front();
                    res.erase(res.begin());
                    for (int k = 0; k < str.size(); ++k) {
                        res.push_back(t + str[k]);
                    }
                }
            }
            return res;
        }
    };

     

  • 相关阅读:
    windows下Mysql免安装版,修改my_default.ini配置文件无效的解决办法
    下压桟(LIFO)
    Dijkstra的双栈算术表达式求值算法
    获取中文的完整拼音并输出
    解析一个文件夹所有文件的中文,并输出到某一文本文档中
    在含有中英文字符串的信息中,提出中文的方法
    创建计算字段
    Docker 常用命令
    mqtt常用命令及配置
    LOG4J
  • 原文地址:https://www.cnblogs.com/grandyang/p/5690104.html
Copyright © 2020-2023  润新知