Skip to content

Commit edbc9bc

Browse files
committed
fd
1 parent 5124ff2 commit edbc9bc

File tree

2 files changed

+37
-43
lines changed

2 files changed

+37
-43
lines changed
Lines changed: 14 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import java.util.ArrayList;
12
import java.util.LinkedList;
23
import java.util.List;
34
import java.util.Queue;
@@ -8,54 +9,31 @@ public class LetterCombinationOfPhoneNumber {
89
* leetcode的测试用例中不包括包含"0"或"1"的情况
910
*/
1011

11-
private final String[] ARR = {
12+
private static final String[] ARR = {
1213
"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"
1314
};
1415

15-
// 耗时3ms
16+
// 耗时2ms
1617
public List<String> letterCombinations(String digits) {
17-
List<String> list = new LinkedList<>();
18-
if (!digits.isEmpty()) {
19-
helper(digits, 0, list, "");
18+
List<String> res = new ArrayList<>();
19+
if (digits.length() == 0) {
20+
return res;
2021
}
21-
return list;
22+
dfs(digits, new StringBuilder(), res, 0);
23+
return res;
2224
}
2325

24-
private void helper(String digits, int start, List<String> list, String s) {
26+
private void dfs(String digits, StringBuilder sb, List<String> res, int start) {
2527
if (start >= digits.length()) {
26-
list.add(s);
28+
res.add(sb.toString());
2729
return;
2830
}
31+
2932
int n = digits.charAt(start) - '0';
3033
for (char c : ARR[n].toCharArray()) {
31-
helper(digits, start + 1, list, s + c);
32-
}
33-
}
34-
35-
/**
36-
* 非递归法,BFS,耗时5ms
37-
*/
38-
public List<String> letterCombinations2(String digits) {
39-
LinkedList<String> queue = new LinkedList<String>();
40-
if (digits.length() == 0) {
41-
return queue;
42-
}
43-
44-
Queue<String> next = new LinkedList<>();
45-
queue.add("");
46-
47-
for (int i = 0; i < digits.length() && !queue.isEmpty(); ) {
48-
String s = queue.poll();
49-
int n = digits.charAt(i) - '0';
50-
for (char c : ARR[n].toCharArray()) {
51-
next.add(s + c);
52-
}
53-
if (queue.isEmpty()) {
54-
queue.addAll(next);
55-
next.clear();
56-
i++;
57-
}
34+
sb.append(c);
35+
dfs(digits, sb, res, start + 1);
36+
sb.setLength(sb.length() - 1);
5837
}
59-
return queue;
6038
}
6139
}

leetcode/src/Main.java

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,31 @@
22

33
public class Main {
44

5-
public boolean isPalindrome(int x) {
6-
if (x < 0) {
7-
return false;
5+
private static final String[] ARR = {
6+
"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"
7+
};
8+
9+
public List<String> letterCombinations(String digits) {
10+
List<String> res = new ArrayList<>();
11+
if (digits.length() == 0) {
12+
return res;
813
}
9-
int n = 0, m = x;
10-
for ( ; x > 0; x /= 10) {
11-
n = n * 10 + x % 10;
14+
dfs(digits, new StringBuilder(), res, 0);
15+
return res;
16+
}
17+
18+
private void dfs(String digits, StringBuilder sb, List<String> res, int start) {
19+
if (start >= digits.length()) {
20+
res.add(sb.toString());
21+
return;
22+
}
23+
24+
int n = digits.charAt(start) - '0';
25+
for (char c : ARR[n].toCharArray()) {
26+
sb.append(c);
27+
dfs(digits, sb, res, start + 1);
28+
sb.setLength(sb.length() - 1);
1229
}
13-
return n == m;
1430
}
1531

1632
public static void main(String[] args) {

0 commit comments

Comments
 (0)