算法记录Day 25 | 回溯算法part02
LeetCode 216.组合总和III
题目链接:216. 组合总和 III
题解
func combinationSum3(k int, n int) [][]int {
result := make([][]int, 0)
dfs(k, n, 1, 0, []int{}, &result)
return result
}
func dfs216(k int, n int, start int, sum int, path []int, result *[][]int) {
if sum > n || len(path) > k {
return
}
if len(path) == k {
if sum == n {
temp := make([]int, len(path))
copy(temp, path)
*result = append(*result, temp)
}
return
}
for i := start; i <= 9; i++ {
sum += i
path = append(path, i)
dfs(k, n, i+1, sum, path, result)
sum -= i
path = path[:len(path)-1]
}
}
LeetCode 17.电话号码的字母组合
题目链接:17. 电话号码的字母组合
题解
package suixianglu
func letterCombinations(digits string) []string {
if digits == "" {
return []string{}
}
result := make([]string, 0)
dfs17(digits, 0, []byte{}, &result)
return result
}
var m = []string{"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}
func dfs17(digist string, start int, path []byte, result *[]string) {
if len(path) == len(digist) {
*result = append(*result, string(path))
return
}
s := int(digist[start] - '0')
letter := m[s-2]
for i := 0; i < len(letter); i++ {
path = append(path, letter[i])
dfs17(digist, start+1, path, result)
path = path[:len(path)-1]
}
}