题目:
返回所有长度为 n 且满足其每两个连续位上的数字之间的差的绝对值为 k 的 非负整数 。
请注意,除了 数字 0 本身之外,答案中的每个数字都 不能 有前导零。例如,01 有一个前导零,所以是无效的;但 0 是有效的。
你可以按 任何顺序 返回答案。
算法:
方法一:模拟
注意k==0时的重复计算和curN<0的跳出循环
func numsSameConsecDiff(n int, k int) []int {
ans := make([]int, 0)
var dfs func(num, curN int)
dfs = func(num, curN int) {
if curN == 0 {
ans = append(ans, num)
} else if curN > 0 {
lowb := num % 10
if valid(lowb + k) {
dfs(num * 10 + lowb + k, curN - 1)
}
if k != 0 && valid(lowb - k) {
dfs(num * 10 + lowb - k, curN - 1)
}
}
}
for i := 1; i <= 9 ; i ++ {
dfs(i, n - 1)
}
return ans
}
func valid(n int) bool {
if 0 <= n && n <= 9 {
return true
}
return false
}