我正在解决一个问题,该问题确定数字中的数字是否按递增顺序排列。现在,我解决这个问题的方法是,例如,考虑数字5678。
为了检查5678是否是递增序列,我取了第一个数字、下一个数字和最后一个数字,它是范围函数range(first,last,(diff of first digit and the next to first digit))中的5,6,8和替换,即range(5,8+1,abs(5-6)).The结果是按升序排列的数字列表
对于这个问题,有一个约束说
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 发布于 2019-03-02 11:51:09
您可以简单地检查数字在转换为字符串时是否为'1234567890'的子字符串
str(num) in '1234567890'发布于 2019-03-02 10:43:38
你可以用一个移位的self压缩数字的字符串表示,并在连续的数字上一起迭代。使用all检查数字是否跟在后面,并使用模10来处理0的情况。
num = 7890
result = all((int(y)-int(x))%10 == 1 for x,y in zip(str(num),str(num)[1:]))发布于 2019-03-02 10:43:53
由于您已经有了zip版本,这里有一个替代解决方案:
import sys
order = dict(enumerate(range(10)))
order[0] = 10
def increasing(n):
n = abs(n)
o = order[n % 10] + 1
while n:
n, r = divmod(n, 10)
if o - order[r] != 1:
return False
o = order[r]
return True
for n in sys.argv[1:]:
print n, increasing(int(n))https://stackoverflow.com/questions/54954713
复制相似问题