967.连续差相同的数字

115 阅读1分钟

题目:
返回所有长度为 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
}