博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 17. Letter Combinations of a Phone Number
阅读量:6324 次
发布时间:2019-06-22

本文共 3141 字,大约阅读时间需要 10 分钟。

https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/

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"].

Note:

Although the above answer is in lexicographical order, your answer could be in any order you want.


  • 字符串组合 + FIFO queue
  • 两种解法,一种用到queue,另一种用vector模拟queue使用。注意初始化比较tricky的地方。
  • queue - C++ Reference
    • http://www.cplusplus.com/reference/queue/queue/
  • vector::swap - C++ Reference
    • http://www.cplusplus.com/reference/vector/vector/swap/
1 //  2 //  main.cpp  3 //  LeetCode  4 //  5 //  Created by Hao on 2017/3/16.  6 //  Copyright © 2017年 Hao. All rights reserved.  7 //  8 //  9 //  main.cpp 10 //  LeetCode 11 // 12 //  Created by Hao on 2017/3/16. 13 //  Copyright © 2017年 Hao. All rights reserved. 14 // 15 #include 
16 #include
17 #include
18 #include
19 using namespace std; 20 21 class Solution { 22 public: 23 vector
letterCombinations(string digits) { 24 vector
vResult; 25 26 if (digits.empty()) return vResult; 27 28 vector
dict{ "0", "1", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; 29 30 queue
myQueue; 31 myQueue.push(""); // Tricky step for the initial value 32 33 for (int i = 0; i < digits.size(); i ++) { 34 int n = myQueue.size(); 35 string sTemp; 36 37 for (int j = 0; j < n; j ++) { 38 // retrieve old letter 39 sTemp = myQueue.front(); 40 myQueue.pop(); 41 42 // append new letter 43 for (auto & ch : dict[digits.at(i) - '0']) 44 myQueue.push(sTemp + ch); 45 } 46 } 47 48 while (! myQueue.empty()) { 49 vResult.push_back(myQueue.front()); 50 myQueue.pop(); 51 } 52 53 return vResult; 54 } 55 56 vector
letterCombinations2(string digits) { 57 vector
vResult; 58 59 if (digits.empty()) return vResult; 60 61 vector
dict{ "0", "1", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; 62 63 vResult.push_back(""); // Tricky step for the initial value 64 65 for (int i = 0; i < digits.size(); i ++) { 66 vector
vTemp; // temp result to override the initial value "" 67 string sTemp; 68 69 for (int j = 0; j < vResult.size(); j ++) { 70 sTemp = vResult[j]; 71 72 for (auto & ch : dict[digits.at(i) - '0']) 73 vTemp.push_back(sTemp + ch); 74 } 75 76 vResult.swap(vTemp); // update result iteratively 77 } 78 79 return vResult; 80 } 81 }; 82 83 int main(int argc, char* argv[]) 84 { 85 Solution mySolution; 86 87 vector
inputs { "", "23"}; 88 vector
outputs; 89 90 /* 91 92 ad ae af bd be bf cd ce cf 93 */ 94 for (auto & input : inputs) { 95 outputs = mySolution.letterCombinations(input); 96 97 for (auto & output : outputs) { 98 cout << output << " "; 99 }100 cout << endl;101 102 outputs = mySolution.letterCombinations2(input);103 104 for (auto & output : outputs) {105 cout << output << " ";106 }107 cout << endl;108 }109 110 return 0;111 }
View Code

 

转载于:https://www.cnblogs.com/pegasus923/p/8567859.html

你可能感兴趣的文章
R学习笔记 第五篇:字符串操作
查看>>
在Mac OS下配置PHP开发环境
查看>>
(转)介绍下Nuget在传统Asp.net项目中的使用
查看>>
C# ArcEngine 实现点击要素高亮并弹出其属性
查看>>
c#线程初探(一)
查看>>
初识GO语言——安装Go语言
查看>>
SDK命令行操作
查看>>
基于Bootstrap的DropDownList的JQuery组件的完善版
查看>>
EXTJS学习系列提高篇:第二十四篇(转载)作者殷良胜,ext2.2打造全新功能grid系列--阅增删改篇...
查看>>
Hadoop MapReduce编程 API入门系列之分区和合并(十四)
查看>>
判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
查看>>
并查集的应用之求解无向图中的连接分量个数
查看>>
7个神奇的jQuery 3D插件
查看>>
在线浏览PDF之PDF.JS (附demo)
查看>>
波形捕捉:(3)"捕捉设备"性能
查看>>
AliOS Things lorawanapp应用介绍
查看>>
美国人的网站推广方式千奇百怪
查看>>
Shashlik:Linux 上运行 Android 应用的新法子
查看>>
《精解Windows8》——2.13 常用快捷键
查看>>
《Greenplum企业应用实战》一1.2 OLTP与OLAP
查看>>