今日题目:
今日总结
研究研究第二道题目是怎么构建树形结构的
216. 组合总和 III
要点
- 套模板
代码:
var (
path []int
res [][]int
)
func combinationSum3(k int, n int) [][]int {
path, res = make([]int, 0, k), make([][]int, 0)
dfs(k, n, 1)
return res
}
func dfs(k int, n int, start int) {
if len(path) == k && sum(path) == n {
tmp := make([]int, k)
copy(tmp, path)
res = append(res, tmp)
return
}
for i := start; i <= 9; i++{
if sum(path)+i > n {
break
}
path = append(path, i)
dfs(k, n, i+1)
path = path[:len(path)-1]
}
}
func sum(a []int) int{
res := 0
for _,item := range a{
res += item
}
return res
}
17. 电话号码的字母组合
要点:
1.逃课了,主要就是注意对数字按键映射的处理
2. 好好想想树形结构是怎么构成的
var (
m []string
path []byte
res []string
)
func letterCombinations(digits string) []string {
m = []string{"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}
path, res = make([]byte, 0), make([]string, 0)
if digits == "" {
return res
}
dfs(digits, 0)
return res
}
func dfs(digits string, start int) {
if len(path) == len(digits) {
tmp := string(path)
res = append(res, tmp)
return
}
digit := int(digits[start] - '0')
str := m[digit-2] //注意这里要和电话上的映射对应
for j := 0; j < len(str); j++ {
path = append(path, str[j])
dfs(digits, start+1)
path = path[:len(path)-1]
}
}