我正在研究一个问题,该问题确定数字中的数字是否按递增顺序排列。现在,我用来解决问题的方法是,例如,考虑数字 5678。要检查是否是5678的递增序列,我把第一位和下一位和最后一位数字是5,6,8在范围内的功能替代 range(first,last,(diff of first digit and the next to first digit))即range(5,8+1,abs(5-6))。结果是数字的升序排列对于这个问题,有一个约束说For incrementing sequences, 0 should come after 9, and not before 1, as in 7890.现在我的程序在输入 7890 处中断。我不知道如何编码这个逻辑。有人能帮助我吗?。增加序列的代码是 len(set(['5','6','7','8']) - set(map(str,range(5,8+1,abs(5-6))))) == 0
3 回答

杨__羊羊
TA贡献1943条经验 获得超7个赞
你可以用一个移位的 self 压缩数字的字符串表示,并一起迭代连续的数字。使用all
检查号码跟随,使用模10来处理0的情况。
num = 7890 result = all((int(y)-int(x))%10 == 1 for x,y in zip(str(num),str(num)[1:]))

陪伴而非守候
TA贡献1757条经验 获得超8个赞
我会创建一个循环生成器并切片:
from itertools import cycle, islice
num = 5678901234
num = tuple(str(num))
print(num == tuple(islice(cycle(map(str, range(10))), int(num[0]), int(num[0]) + len(num))))
这比检查单个数字之间差异的解决方案更快。当然,你可以牺牲长度来让它更快:
def digits(num):
while num:
yield num % 10
num //= 10
def check(num):
num = list(digits(num))
num.reverse()
for i, j in zip(islice(cycle(range(10)), num[0], num[0] + len(num)), num):
if i != j:
return False
return True
添加回答
举报
0/150
提交
取消