• 【LeetCode & 剑指offer刷题】回溯法与暴力枚举法题5:Letter Combinations of a Phone Number


    【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...)

    Letter Combinations of a Phone Number

    Given a string containing digits from 2-9 inclusive, 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. Note that 1 does not map to any letters.
    Example:
    Input: "23"
    Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
    Note:
    Although the above answer is in lexicographical order, your answer could be in any order you want.

    C++
     
    //传统手机数字盘的按键产生的所有可能字母组合
    //感觉和回溯法没有什么关系,就是穷举法
    class Solution
    {
    public:
        vector<string> letterCombinations(string digits)
        {
            if(digits.empty()) return vector<string>(); //异常情况处理
           
            unordered_map<char,string> map =
            {
                {'2',"abc"},
                {'3', "def"},
                {'4', "ghi"},
                {'5', "jkl"},
                {'6', "mno"},
                {'7', "pqrs"},
                {'8',"tuv"},
                {'9',"wxyz"}
            };
           
            vector<string> result;
            result.push_back(""); // add a seed for the initial case,因为之后会遍历结果向量 push了一个空元素,result size变为1
            for(int i = 0; i<digits.size(); i++)//遍历数字, 如 2 3
            {
                if(map.find(digits[i]) == map.end()) continue;//如果不是2~9的数字,继续循环
               
                string& candidate = map[digits[i]]; //得到候选字符构成的字符串
                vector<string> temp;
                for(string& ri:result) //遍历结果向量,如 "a" "b" "c" 
                {
                   for(char ci:candidate) //遍历候选字符 如 "def"
                   {
                       temp.push_back(ri+ci);
                   }
                }
               // result = temp; //复制到结果向量
                result.swap(temp); //交换,swap does not take memory copy
            }
            return result;
        }
    };
     
  • 相关阅读:
    MSSQL大量数据时,建立索引或添加字段后保存更改超时该这么办
    POJ 3261 Milk Patterns (后缀数组)
    POJ 1743 Musical Theme (后缀数组)
    HDU 1496 Equations (HASH)
    694. Distinct Substrings (后缀数组)
    POJ 1222 EXTENDED LIGHTS OUT (枚举 或者 高斯消元)
    POJ 1681· Painter's Problem (位压缩 或 高斯消元)
    POJ 1054 The Troublesome Frog (hash散列)
    HDU 1716 排列2
    HDU 4405 Aeroplane chess (概率DP & 期望)
  • 原文地址:https://www.cnblogs.com/wikiwen/p/10229463.html
Copyright © 2020-2023  润新知