1.连续数字差绝对值为k的问题
这个题目要求我们找出所有长度为 nn 且满足其每两个连续位上的数字之间的差的绝对值为 kk 的非负整数。我们需要注意以下几点:
- 数字不能有前导零,除了数字0本身。
- 我们需要从小到大返回所有符合条件的整数。
接下来,我们来看代码是如何实现这个功能的:
函数 solution(n: int, k: int) -> list:
这个函数用来找出所有符合条件的整数。它定义了一个内部函数 dfs(current: str, length: int),这是一个深度优先搜索(DFS)函数,用来递归地构建符合条件的数字。
dfs 函数首先检查当前数字的长度是否已经达到 nn。如果是,它将当前数字添加到结果列表中。
然后,它获取当前数字的最后一位。接着,它尝试在最后一位数字上加上 kk,如果结果不超过9,它将递归地调用 dfs 函数来构建下一个数字。
同样地,它也尝试在最后一位数字上减去 kk,如果结果不小于0,它也将递归地调用 dfs 函数。
在 solution 函数中,我们首先检查 nn 是否为1。如果是,我们将0添加到结果列表中,因为0是唯一符合条件的数字。
然后,我们从1到9的每个数字开始,调用 dfs 函数来构建符合条件的数字。
最后,我们返回排序后的结果列表。
代码如下:
def solution(n: int, k: int) -> list:
def dfs(current: str, length: int):
if length == n:
result.append(int(current))
return
last_digit = int(current[-1])
if last_digit + k <= 9:
dfs(current + str(last_digit + k), length + 1)
if k != 0 and last_digit - k >= 0:
dfs(current + str(last_digit - k), length + 1)
result = []
if n==1:
result.append(0)
for i in range(1, 10):
dfs(str(i), 1)
return sorted(result)
现在,我们可以使用这个函数来找出所有长度为 nn 且满足其每两个连续位上的数字之间的差的绝对值为 kk 的非负整数。
在深度优先搜索(DFS)算法中,我们通过递归地探索所有可能的路径来解决问题。
让我们详细分析一下 dfs 函数的工作原理:
函数定义、终止条件、获取最后一位数字、尝试加上 kk、尝试减去 kk
通过这种方式,dfs 函数逐步构建所有可能的数字,并检查它们是否满足题目中的条件。这种递归搜索方法确保了我们不会错过任何可能的数字,同时也避免了不必要的计算。