LeetCode: LetterCombinations 题解

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.

题解: 递归。首先将输入字符串解析成数字集合,记录字符串大小为Len。

生成的字符串长度依旧为Len。从首位开始判断该位可以填充的字符。

注意:本题首先需要对手机键盘的字符进行映射,作为辅助。

 1 class Solution {
 2 public:
 3     char vi[10][4];
 4     vector<string > out;
 5     int length;
 6     void getVi()
 7     {
 8         int i,j;
 9         for(i=0;i<=9;i++)
10             for(j=0;j<4;j++)
11                 vi[i][j]=0;
12         for(i=2;i<=7;i++)
13         {
14             for(j=0;j<3;j++)
15             {
16                 vi[i][j]= ‘a‘+ 3*(i-2)+j;
17             }
18         }
19         vi[0][0]=‘ ‘;
20         vi[7][3]=‘s‘;
21         for(i=8;i<=9;i++)
22         {
23             for(j=0;j<3;j++)
24             {
25                 vi[i][j]= ‘b‘ + 3*(i-2)+j;
26             }
27         }
28         vi[9][3]=‘z‘;
29     }
30
31     void DFS(int len,string digits, string c)
32     {
33         if(len==length)
34         {
35             out.push_back(c);
36             return ;
37         }
38         int count = digits[len]-‘0‘;
39         for(int i=0;i<4;i++)
40         {
41            if(vi[count][i]!=0)
42                DFS(len+1,digits,c+vi[count][i]);
43         }
44     }
45     vector<string> letterCombinations(string digits) {
46         out.clear();
47         length = digits.size();
48         if(length==0)
49         {
50             out.push_back("");
51             return out;
52         }
53         if(digits.find(‘1‘)!=string::npos) return out;
54         getVi();
55         DFS(0,digits,"");
56         return out;
57     }
58 };

转载请注明出处: http://www.cnblogs.com/double-win/ 谢谢!

LeetCode: LetterCombinations 题解,布布扣,bubuko.com

时间: 2024-08-02 02:49:46

LeetCode: LetterCombinations 题解的相关文章

LeetCode: palindromes 题解

Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could negative integers be palindromes? (ie, -1) If you are thinking of converting the integer to string, note the restriction of using extra space. You could also

LeetCode: plusOne 题解

Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list. 题目大意: 给定一个由一组数字构成的数组表示的非负整数, 对这个数进行加一操作,并将结果数组返回. 数组的首元素存储的是该非负整数的最高位. 本题比较简

LeetCode(100)题解--Same Tree

https://leetcode.com/problems/same-tree/ 题目: Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are structurally identical and the nodes have the same value. 思路:  DFS AC代码: 1.递归 1

LeetCode(3)题解: Longest Palindromic Substring

https://leetcode.com/problems/longest-palindromic-substring/ 题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 思路: 我的思路是遍

LeetCode(27)题解:Remove Element

https://leetcode.com/problems/remove-element/ Given an array and a value, remove all instances of that value in place and return the new length. The order of elements can be changed. It doesn't matter what you leave beyond the new length. 思路: 因为可以改变元

LeetCode(26)题解:Remove Duplicates from Sorted Array

https://leetcode.com/problems/remove-duplicates-from-sorted-array/ Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this

Leetcode(58)题解:Length of Last Word

https://leetcode.com/problems/length-of-last-word/ 题目: Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the length of last word in the string. If the last word does not exist, return 0. Note: A word is de

LeetCode(38)题解: Count and Say

https://leetcode.com/problems/count-and-say/ 题目: The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ... 1 is read off as "one 1" or 11.11 is read off as "two 1s" or 21.21 is read off as

LeetCode(66)题解: Plus One

https://leetcode.com/problems/plus-one/ 题目: Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list. 思路: 设置进1位,逢9进1.注意999这种情况要首位inser