下一个最大的数字,相同的数字
下一个最大的数字,相同的数字
我的代码看起来没有问题,但是当输入无法生成一个比当前数更大的数时,比如输入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有人可以帮忙吗?
从上述内容中可以得出,问题的出现原因是代码运行时间过长,逻辑错误以及使用了不恰当的方法。解决方法是使用更高效的算法,并根据实际输入来进行计算。
文章内容如下:
在解决(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/…
如果开始只对右边的几位数字进行排列,而不是整个数字,是否可以工作?