zoukankan      html  css  js  c++  java
  • 【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;
        }
    };
     
  • 相关阅读:
    知识加油站
    markdown 使用
    今日计划
    继续继续
    我回来了
    2020/5/8
    2020/5/10
    明天一定要学习了
    入驻博客园
    this is a test
  • 原文地址:https://www.cnblogs.com/wikiwen/p/10229463.html
Copyright © 2011-2022 走看看