📅  最后修改于: 2023-12-03 15:39:41.993000             🧑  作者: Mango
你需要编写一个函数,输入参数为一个数字x,输出所有非递增的和序列。
def decreasing_sum_sequences(x: int) -> List[List[int]]:
pass
x
:一个整数,表示需要打印所有非递增的和序列的数字。output
:一个二维列表,其中每个一维列表表示一个非递增的和序列。序列按照字典序从小到大排列。这里我们可以采用递归的方式实现,具体思路为:
最后再将当前序列加入结果列表中即可。需要注意的是,结果列表中的每个序列都需要按照字典序从小到大排列。
from typing import List
def decreasing_sum_sequences(x: int) -> List[List[int]]:
res = []
def search(start: int, target: int, path: List[int]):
if target == 0:
res.append(path)
return
for i in range(start, target+1):
if not path or i <= path[-1]:
search(i, target - i, path + [i])
search(1, x, [])
return sorted(res)
start
:从哪个数开始枚举,避免重复;target
:目标数字,即还需要凑多少;path
:当前的序列;x = 5
print(decreasing_sum_sequences(x))
[[1, 1, 1, 1, 1], [1, 1, 1, 2], [1, 1, 3], [1, 2, 2], [1, 4], [2, 3], [5]]