首页 > 解决方案 > 查找多个相同数字的立即数的优化或最佳方法

问题描述

所以我有一个像 123 这样的数字,具有相同数字的立即数是 132。考虑另一个例子,数字是 1238,下一个立即数是 1283。所以对于这个逻辑,我已经实现了一个代码

def findnext(n):
    ns=list(map(int,str(n)))
    for i in reversed(range(len(ns))):
        if i == 0: return n
        if ns[i] > ns[i-1] :
            break        
    left,right=ns[:i],ns[i:]
    for k in reversed(range(len(right))):
        if right[k]>left[-1]:
           right[k],left[-1]=left[-1],right[k]
           break
    return int("".join(map(str,(left+sorted(right)))))
n=int(input())
print(findnext(n)) 

我需要一个在不使用 itertools 的情况下更优化或更精简代码的逻辑。请帮我!!提前致谢。

标签: pythonpython-3.xoptimizationlogic

解决方案


这不是一个 Python 问题,而是一个逻辑问题。

我正确理解您的问题的方式是您需要使用相同的数字并找到最接近的数字。从逻辑上讲,这意味着大多数时候您想要切换最后两位数字。但是,如果我这样做最接近你的例子,距离1238不是`1328-1238=90,还是我错过了某种规则?距离可以是双向的还是只有一个?12831283-1238=45

当我确定规则时,我(和其他人)可能会提供更多帮助。


推荐阅读