【发布时间】:2017-06-05 11:56:01
【问题描述】:
我想遍历所有 n 位数字,这样数字的第二个数字总是小于或等于第一个数字,第三个数字小于或等于第二个数字等等。我可以通过编写一个可怕的代码来实现如:
for i in range(10):
for j in range(i+1):
for k in range(j+1):
等等,但是对于 10 位数字,我的代码开始看起来很糟糕,而且要写很多东西,如果我想赞扬其中的一些,缩进会变得很糟糕。有没有一种简洁明了的方法?
编辑:只是为了让人们知道我为什么要为此烦恼,https://projecteuler.net/problem=74 让我检查从 1 到 100 万的数字。不幸的是,这并不像我想象的那么简单——带前导零的数字与内部带零的数字的处理方式不同,因此必须执行一些额外的魔法。无论如何,感谢所有有见地的建议。
【问题讨论】:
-
@iFlo 某种通过神秘魔法工作的古老野兽。
-
数字的顺序重要吗?
-
实际上,您应该按照以下方式进行:考虑您的号码,比较两个第一位数字。然后,再次调用该函数,但您已经截断了第一个数字。然后您正在检查第 2 位和第 3 位等。如果不再有两位要比较或当前比较失败,您可以停止。
-
@iFlo 我不认为你明白。我不想检查给定的数字是否遵守我的规则,我想对遵守此规则的所有 n 位数字运行一个函数,因此不要迭代所有 n 位数字并检查是否这条规则正在被遵守,因为它需要很长时间。
-
与您的问题不完全相关:可以使用 this trick 将多个 for 循环组合成一个循环。