我试图生成最大长度为n的数字,其所有数字都严格递减
如果n = 5
,
那么数字将是:
54321
5432
543
54
5421
542
541
5321
532
53
521
52
51
5
4321
432
43
431
421
42
41
4
...
有关于如何进行的提示吗
先谢谢你
编辑- 我当前的代码是这样的,我没有得到所有的结果
def func(arr):
for x in arr:
token=x[-1]
k=int(token)-1
while k>1:
for i in range(1,k):
f.write(x)
for j in range(k,i,-1):
f.write(str(j))
k-=1
f = open ("demo.txt", "w")
arr = ["987"]
for i in range(986,321,-1):
tens = i
units = i%10
tens = int(tens)/10
hundreds = int(tens)/10
tens%=10
hundreds%=10
if tens >= hundreds or units>= tens:
continue
arr.append(str(i))
func(arr)
f.close()
下面是一个递归生成器函数:
或者使用^{} 方法:
它实际上并不复杂,您可以使用
itertools.combinations
生成数字组合,然后使用zip
应用一个因子,并获取每个项目和sum
的乘积例如,系数为[1,101001000]的[1,2,4,5]将给出1+20+400+5000=5421
诀窍在于
combinations
总是以定义的顺序(从早到晚)生成组合,因此combinations([1,2,3], 2)
将给出[(1, 2), (1, 3), (2, 3)]
输出:
如果需要严格的输出顺序,请使用以下方法(效率稍低):
输出:
此代码生成具有自定义长度的降序数字序列:
如果希望长度小于等于5,请执行以下操作:
问题有点模糊,但您可以更改这部分代码以实现您的目标:
相关问题 更多 >
编程相关推荐