Fork me on GitHub
0%

leetcode17

题目

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

样例

  • 0 <= digits.length <= 4
  • digits[i] 是范围 [‘2’, ‘9’] 的一个数字。

输入:digits = “23”
输出:[“ad”,”ae”,”af”,”bd”,”be”,”bf”,”cd”,”ce”,”cf”]
输入:digits = “”
输出:[]
输入:digits = “2”
输出:[“a”,”b”,”c”]

思路

排列问题,回溯思想,在某个节点加一个元素往下搜,换一个继续。

  • 路径: 目前已经做了的选择集合
  • 选择列表: 还有哪些列表可选
  • 结束条件: 但索引长度等于数组长度

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var digitsMap = map[byte]string{
'2':"abc",
'3':"def",
'4':"ghi",
'5':"jkl",
'6':"mno",
'7':"pqrs",
'8':"tuv",
'9':"wxyz",
}

func letterCombinations(digits string) (ans []string){
if len(digits)==0{
return []string{}
}

var dfs func(string, int, string)
dfs = func(digits string,index int,tmpStr string){
if index==len(digits){
ans = append(ans,tmpStr)
}else{
for _,char := range digitsMap[digits[index]]{
tmpStr += string(char)
dfs(digits,index+1,tmpStr)
tmpStr = tmpStr[:len(tmpStr)-1]
}
}
}
dfs(digits,0,"")
return
}
觉得有帮助的请作者喝杯咖啡吧~