下一个最大的数字,相同的数字

7 浏览
0 Comments

下一个最大的数字,相同的数字

我的代码看起来没有问题,但是当输入无法生成一个比当前数更大的数时,比如输入531时,我似乎无法返回-1。\n

import itertools as it
def next_bigger(n):
    if sorted("531", reverse = True) == list("531"):
        return -1
    s = tuple(str(n))
    for x in it.dropwhile(lambda x: x <= s, it.permutations(sorted(s))):
        return int(''.join(x))
    return s

\n有人可以帮忙吗?

0
0 Comments

从上述内容中可以得出,问题的出现原因是代码运行时间过长,逻辑错误以及使用了不恰当的方法。解决方法是使用更高效的算法,并根据实际输入来进行计算。

文章内容如下:

在解决(Next Biggest Number Same Digits)这个问题时,我们可以在函数的开头使用一个if语句来检查数字是否已经按照逆序排序。如果已经排序,则直接返回-1。代码示例如下:

>>> sorted("531", reverse = True) == list("531")
True

将这个条件语句放在哪一行呢?

.Jibz 在你定义函数之后的第一行。

当我这样做时(就是上面编辑后的代码),输出显示“-1应该等于21”,其中21是输入为12时的第一个测试输出。

嗯,它应该是 `if sorted(str(n), reverse = True) == list(str(n)):`。当然你不能每次都传递`531`。

不要使用他字面上的例子“531”。使用实际输入作为函数的参数。

有道理,是的。现在我的问题是运行时间太长了,唉。

“进程被终止。它花费的时间超过了8000ms。”

为什么要调用`permutations()`呢?

我的理解是它会按照顺序生成相同数字的排列,然后返回比输入大的第一个排列。

.Jibz 暴力解法不是最佳的,可以参考stackoverflow.com/questions/9368205/…codereview.stackexchange.com/questions/115609/…

如果开始只对右边的几位数字进行排列,而不是整个数字,是否可以工作?

0