diff --git a/leetcode/0017.Letter-Combinations-of-a-Phone-Number/17. Letter Combinations of a Phone Number.go b/leetcode/0017.Letter-Combinations-of-a-Phone-Number/17. Letter Combinations of a Phone Number.go index 4015656f..385c8a84 100644 --- a/leetcode/0017.Letter-Combinations-of-a-Phone-Number/17. Letter Combinations of a Phone Number.go +++ b/leetcode/0017.Letter-Combinations-of-a-Phone-Number/17. Letter Combinations of a Phone Number.go @@ -13,9 +13,11 @@ var ( "tuv", //8 "wxyz", //9 } - res = []string{} + res = []string{} + final = 0 ) +// 解法一 DFS func letterCombinations(digits string) []string { if digits == "" { return []string{} @@ -37,3 +39,30 @@ func findCombination(digits *string, index int, s string) { } return } + +// 解法二 非递归 +func letterCombinations_(digits string) []string { + if digits == "" { + return []string{} + } + index := digits[0] - '0' + letter := letterMap[index] + tmp := []string{} + for i := 0; i < len(letter); i++ { + if len(res) == 0 { + res = append(res, "") + } + for j := 0; j < len(res); j++ { + tmp = append(tmp, res[j]+string(letter[i])) + } + } + res = tmp + final++ + letterCombinations(digits[1:]) + final-- + if final == 0 { + tmp = res + res = []string{} + } + return tmp +} diff --git a/website/content/ChapterFour/0017.Letter-Combinations-of-a-Phone-Number.md b/website/content/ChapterFour/0017.Letter-Combinations-of-a-Phone-Number.md index 3c9f5296..1c686926 100755 --- a/website/content/ChapterFour/0017.Letter-Combinations-of-a-Phone-Number.md +++ b/website/content/ChapterFour/0017.Letter-Combinations-of-a-Phone-Number.md @@ -50,9 +50,11 @@ var ( "tuv", //8 "wxyz", //9 } - res = []string{} + res = []string{} + final = 0 ) +// 解法一 DFS func letterCombinations(digits string) []string { if digits == "" { return []string{} @@ -75,5 +77,33 @@ func findCombination(digits *string, index int, s string) { return } +// 解法二 非递归 +func letterCombinations_(digits string) []string { + if digits == "" { + return []string{} + } + index := digits[0] - '0' + letter := letterMap[index] + tmp := []string{} + for i := 0; i < len(letter); i++ { + if len(res) == 0 { + res = append(res, "") + } + for j := 0; j < len(res); j++ { + tmp = append(tmp, res[j]+string(letter[i])) + } + } + res = tmp + final++ + letterCombinations(digits[1:]) + final-- + if final == 0 { + tmp = res + res = []string{} + } + return tmp +} + + ```