📅  最后修改于: 2023-12-03 14:54:28.423000             🧑  作者: Mango
本题要求打印出所有n位数字,使得该数字各位数字中的偶数之和与奇数之和之差的绝对值为1。
解决该题的一种方法是使用回溯法,通过枚举所有可能的数字来得到符合要求的数字。
class Solution:
def __init__(self):
self.res = []
def printNumbers(self, n: int) -> List[int]:
if n <= 0:
return []
# 开始回溯
for i in range(1, 10):
self.dfs(n-1, i)
return self.res
def dfs(self, n, num):
if n == 0:
self.res.append(num)
return
last_digit = num % 10
# 枚举下一位数字
if last_digit == 0:
self.dfs(n-1, num*10+1)
elif last_digit == 9:
self.dfs(n-1, num*10+8)
else:
self.dfs(n-1, num*10+last_digit-1)
self.dfs(n-1, num*10+last_digit+1)
printNumbers(n: int) -> List[int]
的输入参数为数字的位数 n,输出为符合要求的数字列表。dfs(n-1, i)
时只选择数字 1~9 作为第一位。dfs(n, num)
中,n 为剩余未确定的数字位数,num 为已确定的数字。通过 num % 10
获取已确定数字的最后一位,再通过枚举下一位数字来继续回溯。