题目

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.

Input:Digit string “23”

Output: [“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].

分析

本题目要求求出多个字符串按字母全排得到的字符串集合。

我们知道求两个字符串的字母全排是简单的,只需要两次遍历,按照字母组合即可。

那么如何求多个字符串的全排呢?尤其是字符串的个数还是不固定的,对此(字符串大于等于3个时),我采用的解决办法是,先求出前两个的全排集合v,然后,逐次将集合中的字符串与第三个字符串的字母连接,得到新的集合。

详细思路见AC代码。

AC代码

  1. class Solution {
  2. public:
  3. vector<string> letterCombinations(string digits) {
  4. vector<string> vs;
  5. //求len为数字字符串的长度也对应字母字符串的个数
  6. int len = strlen(digits.c_str());
  7. if (len <= 0 )
  8. return vs;
  9. if (len == 1)
  10. {
  11. string str = letters(digits[0]);
  12. for (int i = 0; i < strlen(str.c_str()); i++)
  13. {
  14. string s = "";
  15. s += str[i];
  16. vs.push_back(s);
  17. }
  18. return vs;
  19. }
  20. //前两个单独处理
  21. string str1 = letters(digits[0]);
  22. string str2 = letters(digits[1]);
  23. for (int i = 0; i < strlen(str1.c_str()); i++)
  24. {
  25. for (int j = 0; j < strlen(str2.c_str()); j++)
  26. {
  27. string str = "";
  28. str = str + str1[i] + str2[j];
  29. vs.push_back(str);
  30. }
  31. }
  32. for (int i = 2; i < len; i++)
  33. {
  34. string str = letters(digits[i]);
  35. vs = Combine(vs, str);
  36. }
  37. return vs;
  38. }
  39. vector<string> Combine(const vector<string> &vs, const string &str2)
  40. {
  41. vector<string> v;
  42. int len = vs.size();
  43. if (len <= 0)
  44. return v;
  45. int len2 = strlen(str2.c_str());
  46. for (int i = 0; i < len; i++)
  47. {
  48. string str = vs[i];
  49. for (int j = 0; j < len2; j++)
  50. {
  51. v.push_back(str + str2[j]);
  52. }
  53. }//for
  54. return v;
  55. }
  56. string letters(const char &num)
  57. {
  58. string str = "";
  59. switch (num)
  60. {
  61. case '2':
  62. str = "abc"; break;
  63. case '3':
  64. str = "edf"; break;
  65. case '4':
  66. str = "ghi"; break;
  67. case '5':
  68. str = "jkl"; break;
  69. case '6':
  70. str = "mno"; break;
  71. case '7':
  72. str = "pqrs"; break;
  73. case '8':
  74. str = "tuv"; break;
  75. case '9':
  76. str = "wxyz"; break;
  77. default:
  78. str = "";
  79. }
  80. return str;
  81. }
  82. };

GitHub测试程序源码

LeetCode (17)Letter Combinations of a Phone Number的更多相关文章

  1. LeetCode(17)Letter Combinations of a Phone Number

    题目如下: Python代码: class Solution(object): def letterCombinations(self, digits): """ :ty ...

  2. leetcode第18题--Letter Combinations of a Phone Number

    Problem: Given a digit string, return all possible letter combinations that the number could represe ...

  3. LeetCode(17):电话号码的字母组合

    Medium! 题目描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23& ...

  4. Leetcode(17)-电话号码的字母组合

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

  5. Leetcode之回溯法专题-17. 电话号码的字母组合(Letter Combinations of a Phone Number)

    [Leetcode]17. 电话号码的字母组合(Letter Combinations of a Phone Number) 题目描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组 ...

  6. 【一天一道LeetCode】#17. Letter Combinations of a Phone Number

    一天一道LeetCode (一)题目 Given a digit string, return all possible letter combinations that the number cou ...

  7. [LeetCode][Python]17: Letter Combinations of a Phone Number

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 17: Letter Combinations of a Phone Numb ...

  8. 《LeetBook》leetcode题解(17):Letter Combinations of a Phone Number[M]

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  9. Leetcode 17. Letter Combinations of a Phone Number(水)

    17. Letter Combinations of a Phone Number Medium Given a string containing digits from 2-9 inclusive ...

随机推荐

  1. 如何用Python在10分钟内建立一个预测模型

    转载自:https://baijia.baidu.com/s?old_id=307995 最近,我从孙子(指<孙子兵法>——译者注)那里学到了一些策略:速度和准备 “兵之情主速,乘人之不及 ...

  2. 更新项目,uwsgi重新加载和日志文件

    uwsgi --reload /var/run/uwsgi.pid uwsgi.pid是uwsgi进程文件 /var/log/uwsgi.log

  3. Chrome插件制作

    由于网上很难找到关于Chrome插件制作的中文教程,为了总结和方便更多的开发者,本文以最常见的显示效果为browser_action的二维码插件为例,进行相关阐述.前端童鞋开发的话应该很简单的,鄙人是 ...

  4. Javaweb之xml

        1 XML概述     1.1 XML是什么? eXtensible Markup Language可扩展标记语言          1.2 XML作用         主要是用于描述数据,而 ...

  5. itop安装中使用nginx安装后不能出现enter itop的问题

    安装中没有出现enter itop,  如下的网络请求给了我们原因 原来使用的是域名请求资源文件,而该域名并不能指向我的服务器,所以安装中资源文件请求不成功,查看了我的nginx配置,如下 [ro ...

  6. Python3简明教程(一)—— 开始Python之旅

    第一个Python程序 作为我们第一个Python程序——打印"Hello  World!". 在终端输入Python3进入交互界面: 输入print("Hello  W ...

  7. CodeForces - 1059D——二分/三分

    题目 题目链接 简单的说,就是作一个圆包含所有的点且与x轴相切,求圆的最小半径 方法一 分析:求最小,对半径而言肯定满足单调性,很容易想到二分.我们二分半径,然后由于固定了与X轴相切,我们对于每一个点 ...

  8. uva1439 Exclusive Access 2

    感觉这道题读题有点难..似乎和现实联系的比较密切1.每个process的两个资源可以顺序反一下2.p->q,q->s不可以同时进行 p->q,p->s可以 输出最长等待链输出每 ...

  9. 我的app自动化实战练习一

    ''' -*- coding: utf-8 -*- @Time : 2019/6/10 0010 10:39 @Author : 无邪 @File : test_data.py @Software: ...

  10. android 解密工具

    androguard. 这个是python写的 安装: pip install androguard