Skip to content

Commit db8c897

Browse files
committed
Problem0017 add solution two
1 parent d7ed4c3 commit db8c897

File tree

2 files changed

+61
-2
lines changed

2 files changed

+61
-2
lines changed

leetcode/0017.Letter-Combinations-of-a-Phone-Number/17. Letter Combinations of a Phone Number.go

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@ var (
1313
"tuv", //8
1414
"wxyz", //9
1515
}
16-
res = []string{}
16+
res = []string{}
17+
final = 0
1718
)
1819

20+
// 解法一 DFS
1921
func letterCombinations(digits string) []string {
2022
if digits == "" {
2123
return []string{}
@@ -37,3 +39,30 @@ func findCombination(digits *string, index int, s string) {
3739
}
3840
return
3941
}
42+
43+
// 解法二 非递归
44+
func letterCombinations_(digits string) []string {
45+
if digits == "" {
46+
return []string{}
47+
}
48+
index := digits[0] - '0'
49+
letter := letterMap[index]
50+
tmp := []string{}
51+
for i := 0; i < len(letter); i++ {
52+
if len(res) == 0 {
53+
res = append(res, "")
54+
}
55+
for j := 0; j < len(res); j++ {
56+
tmp = append(tmp, res[j]+string(letter[i]))
57+
}
58+
}
59+
res = tmp
60+
final++
61+
letterCombinations(digits[1:])
62+
final--
63+
if final == 0 {
64+
tmp = res
65+
res = []string{}
66+
}
67+
return tmp
68+
}

website/content/ChapterFour/0017.Letter-Combinations-of-a-Phone-Number.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,11 @@ var (
5050
"tuv", //8
5151
"wxyz", //9
5252
}
53-
res = []string{}
53+
res = []string{}
54+
final = 0
5455
)
5556

57+
// 解法一 DFS
5658
func letterCombinations(digits string) []string {
5759
if digits == "" {
5860
return []string{}
@@ -75,5 +77,33 @@ func findCombination(digits *string, index int, s string) {
7577
return
7678
}
7779

80+
// 解法二 非递归
81+
func letterCombinations_(digits string) []string {
82+
if digits == "" {
83+
return []string{}
84+
}
85+
index := digits[0] - '0'
86+
letter := letterMap[index]
87+
tmp := []string{}
88+
for i := 0; i < len(letter); i++ {
89+
if len(res) == 0 {
90+
res = append(res, "")
91+
}
92+
for j := 0; j < len(res); j++ {
93+
tmp = append(tmp, res[j]+string(letter[i]))
94+
}
95+
}
96+
res = tmp
97+
final++
98+
letterCombinations(digits[1:])
99+
final--
100+
if final == 0 {
101+
tmp = res
102+
res = []string{}
103+
}
104+
return tmp
105+
}
106+
107+
78108

79109
```

0 commit comments

Comments
 (0)