【JAVA、C++】LeetCode 017 Letter Combinations of a Phone Number
2015-05-02 10:20
519 查看
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.
解题思路:
思路一:
使用DFS算法,JAVA实现如下:
C++:
思路二:
凡是用到递归的地方都能用循环解决,因此可以用循环算法,JAVA实现如下:
A mapping of digit to letters (just like on the telephone buttons) is given below.
解题思路:
思路一:
使用DFS算法,JAVA实现如下:
static String[] alpha = new String[] { " ","1", "abc", "def","ghi", "jkl", "mno","pqrs", "tuv", "wxyz" }; static StringBuilder sb = new StringBuilder(); static void dfs(List<String> list, String digits, int cur) { if (cur >= digits.length()) list.add(sb.toString()); else { for (int i = 0; i < alpha[digits.charAt(cur) - '0'].length(); i++) { sb.append(alpha[digits.charAt(cur) - '0'].charAt(i)); dfs(list, digits, cur + 1); sb.deleteCharAt(sb.length() - 1); } } } static public List<String> letterCombinations(String digits) { List<String> list = new ArrayList<String>(); if (digits.length()==0) return list; dfs(list, digits, 0); return list; }
C++:
class Solution { public: const string alpha[10] = {" ","1", "abc", "def","ghi", "jkl", "mno","pqrs", "tuv", "wxyz"}; void dfs(vector<string> &list, string &digits, int cur,string sb) { if (cur >= digits.length()) list.push_back(sb); else { for (char a : alpha[digits[cur] - '0']) { sb.push_back(a); dfs(list, digits, cur + 1,sb); sb.pop_back(); } } } vector<string> letterCombinations(string digits) { vector<string> list; if (digits.length() == 0) return list; dfs(list, digits, 0,""); return list; } };
思路二:
凡是用到递归的地方都能用循环解决,因此可以用循环算法,JAVA实现如下:
static public List<String> letterCombinations(String digits) { List<String> list = new ArrayList<String>(); String[] alpha = new String[] { " ","1", "abc", "def","ghi", "jkl", "mno","pqrs", "tuv", "wxyz" }; if (digits.length()==0) return list; int[] number = new int[digits.length()];//存储每次遍历字符位置 int index = 0; while(index>=0) { StringBuilder sb = new StringBuilder(); for(int i=0; i<digits.length(); i++) sb.append(alpha[digits.charAt(i)-'0'].charAt(number[i])); list.add(sb.toString()); // 每回合需要重置index到末尾 index = digits.length()-1; while(index>=0) { if( number[index] < (alpha[digits.charAt(index)-'0'].length()-1) ) { number[index]++; break; } else { number[index] = 0; index--; } } } return list; }
相关文章推荐
- LEETCODE 17 Letter Combinations of a Phone Number (JAVA题解)
- [LeetCode][Java] Letter Combinations of a Phone Number
- 2017-09-10 LeetCode_017 Letter Combinations of a Phone Number
- [LeetCode]题解(python):017-Letter Combinations of a Phone Number
- [LeetCode-Java]17. Letter Combinations of a Phone Number
- (Java)LeetCode-17. Letter Combinations of a Phone Number
- leetcode解题方案--017--Letter Combinations of a Phone Number
- 【小熊刷题】Letter Combinations of a Phone Number <Leetcode 17, Java>
- leetcode_c++:Letter Combinations of a Phone Number(017)
- leetcode Letter Combinations of a Phone Number(Java)
- [LeetCode]017-Letter Combinations of a Phone Number
- Java [leetcode 17]Letter Combinations of a Phone Number
- leetcode 017 —— Letter Combinations of a Phone Number
- Letter Combinations of a Phone Number leetcode java
- LeetCode-017 Letter Combinations of a Phone Number
- [leetcode-17]Letter Combinations of a Phone Number(java)
- LeetCode 017 Letter Combinations of a Phone Number
- 017_LeetCode_17 Letter Combinations of a Phone Number
- [Java]LeetCode17 Letter Combinations of a Phone Number
- LeetCode 17 Letter Combinations of a Phone Number(C,C++,Java,Python)