zoukankan      html  css  js  c++  java
  • [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;
        }
    };

     

  • 相关阅读:
    MySql查询分页数据
    出现不不能引java.util.Date包的情况
    类的反射实例(servlet的抽取)
    关于C++ const 的全面总结
    教你用笔记本破解无线路由器password
    使用 HTML5 webSocket API实现即时通讯的功能
    用户研究经验分享
    我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
    用户參与记录存储的演变
    IC芯片
  • 原文地址:https://www.cnblogs.com/grandyang/p/5690104.html
Copyright © 2011-2022 走看看