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

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

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.

思路

穷举法加回溯。用一个二维数组保存每个数字对应可能出现的字母,当每一层穷举完后回溯到上一层,再次穷举下个字符可能出现的组合。

1 static char keys[8][4] = {
{
'a', 'b', 'c'}, // 2 2 {
'd', 'e', 'f'}, // 3 3 {
'g', 'h', 'i'}, // 4 4 {
'j', 'k', 'l'}, // 5 5 {
'm', 'n', 'o'}, // 6 6 {
'p', 'q', 'r', 's'}, // 7 7 {
't', 'u', 'v'}, // 8 8 {
'w', 'x', 'y', 'z'}}; // 9 9 static int sizes[] = {
3, 3, 3, 3, 3, 4, 3, 4}; 10 11 class Solution {12 public:13 vector
letterCombinations(string digits) {14 vector
result;15 int levels = digits.size(), current_level = 0;16 vector
indexes(levels, 0);17 18 if (0 == levels) {19 return vector
(1, "");20 }21 22 while (true) {23 int ch_index = digits[current_level] - '0' - 2;24 25 if (sizes[ch_index] == indexes[current_level]) {26 if (0 == current_level) {27 break;28 }29 30 indexes[current_level] = 0;31 --current_level;32 ++indexes[current_level];33 continue;34 }35 else {36 if (current_level < (levels - 1)) {37 ++current_level;38 }39 else {40 string s;41 int i;42 43 for (i = 0; i < current_level; ++i) {44 s.push_back(keys[digits[i] - '0' - 2][indexes[i]]);45 }46 s.push_back('?');47 48 for (i = 0; i < sizes[ch_index]; ++i) {49 s[current_level] = keys[ch_index][i];50 result.push_back(s);51 }52 53 indexes[current_level] = sizes[ch_index];54 }55 }56 }57 58 return result;59 }60 };

 

转载于:https://www.cnblogs.com/panda_lin/p/letter_combinations_of_a_phone_number.html

你可能感兴趣的文章
Reveal 配置与使用
查看>>
Java中反射的学习与理解(一)
查看>>
C语言初学 俩数相除问题
查看>>
B/S和C/S架构的区别
查看>>
[Java] Java record
查看>>
jQuery - 控制元素显示、隐藏、切换、滑动的方法
查看>>
postgresql学习文档
查看>>
Struts2返回JSON数据的具体应用范例
查看>>
js深度克隆对象、数组
查看>>
socket阻塞与非阻塞,同步与异步
查看>>
团队工作第二天
查看>>
System类
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
Xamarin Visual Studio不识别JDK路径
查看>>
菜鸟“抄程序”之道
查看>>
Ubuntu下关闭防火墙
查看>>
TCP/IP 邮件的原理
查看>>
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>