• LeetCode17. *的字母组合


    题目

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

    输入:"23"
    输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

    分析

    本题目实质依旧是组合问题,但是与之前两道组合 77题组合、216题组合总和||| 有些不同,它是由多个集合来求解组合。脑中构建搜索树形状:for循环水平搜索每个集合元素,递归纵向搜索,深度就是集合的个数,如23就就是数字2对应字母的集合、数字3对应字母的集合,所以深度就是2。注意:因为每个集合所包含元素的个数不等,故应该在for循环 前确定元素个数(代码22—23行)

     纵向搜索多个集合

    代码

     1 class Solution {
     2 public:
     3     string path;
     4     vector<string>res;
     5     const string letterMap[10] = {
     6         "",//0
     7         "",//1
     8         "abc",//2
     9         "def",//3
    10         "ghi",//4
    11         "jkl",//5
    12         "mno",//6
    13         "pqrs",//7
    14         "tuv",//8
    15         "wxyz",//9
    16     };
    17     void backtracking(string digits,int index){
    18         if(path.size() == digits.length()){  //或者index == digits.size()
    19             res.push_back(path);
    20             return;
    21         }
    22         int digit = digits[index] - '0';//将每个字符转换为整型好做哈希
    23         string letters = letterMap[digit];//取出对应数字的字符串
    24         for(int i = 0;i < letters.length();i++){
    25             path.push_back(letters[i]);
    26             backtracking(digits,index + 1);
    27             path.pop_back();
    28         }
    29     }
    30     vector<string> letterCombinations(string digits) {
    31         if(digits.length() == 0) return res;
    32         backtracking(digits,0);
    33         return res;
    34     }
    35 };

    总结:

    1.多集合的组合问题中index与单集合的组合问题中的index含义不一样,前者表示是从第几个集合取数,也就是目前到达的递归深度。而后者表示单个集合的取数位置。

    2.数字和多个字母如何做映射?其本质思想来源于哈希,用字符串数组做哈希,数组下标索引代表数字,与之对应的每个字母组合成字符串存于该位置。

    第216题.组合总和III

  • 相关阅读:
    防窜货下加密锁使用常见问题
    SQL Server 2000/2005/2008 触发器的管理和查看
    列表显示时,部分凭证会分两行显示,且不能删除
    JDBC 连接 带实例名的SQL Server
    登录软件提示:读取数据源出现错误,pkcs7填充无效,无法被移除
    完美卸载SQL Server 2008的方案
    彻底卸载(删除)SQL server2000
    NCV5取消:授权数到达,或者许可证过期提示的秘诀
    SQL Server日志清空方法 .
    第二天 一列布局
  • 原文地址:https://www.cnblogs.com/fresh-coder/p/14340824.html
Copyright © 2020-2023  润新知