【发布时间】:2021-11-30 23:19:17
【问题描述】:
我正在编写返回具有相同数字的下一个更大数字的代码。我认为我的解决方案很快,但在测试时我意识到我的时间复杂度非常糟糕。
def next_bigger(n):
j = n
for i in range(n):
n+=1
if sorted(str(j)) == sorted(str(n)):
return n
return -1
print(next_bigger(143255555555555553223))
有没有更快的方法来实现这个算法。有没有办法让我替换 sorted() 并删除 for 循环?
注意:如果找不到更大的数字,则返回 -1。忘记加了,以为很清楚。
注2:对不起,我不擅长写问题。原始算法有 while True 而不是 for 循环。这就是为什么它在按原样运行时返回 -1 的原因,使用 while True 会给出正确的答案,但需要时间。
一些输入:123 -> 132 || 2532 -> 3225 || 543890432 -> 543892034 || 143255555555555553223 -> 143255555555555553232 ||
【问题讨论】:
-
在
11的情况下你期望返回什么?目前还不清楚是否必须使用所有数字。 -
您的算法不仅速度很慢,而且也不正确。
print(next_bigger(1999))错误地打印-1,而不是9199。 -
@Stef 我漂亮确定OP意味着如果输入
1999,则响应应该是-1,因为9199大于原始数字,而999不包括1。 -
@NathanielFord 我不明白你的评论。 OP 正在寻找具有相同数字的下一个更大的数字。与 1999 相同的数字只有 4 个:1999、9199、9919 和 9991。1999 之后的下一个更大的数字是 9199。
-
@stef 我可能对 OP 正在寻找什么有误解 - 如果我有数字 1、2 和 3,我会说“3 是最大的”而“2 是下一个”最大'。暗示他们正在寻找一个较小的数字 - 但我同意您可以将其解析为他们正在寻找一个更大的数字,这与他们的代码一致。举例说明会有所帮助! OP:给我们一些示例输入以及您期望发生的情况!
标签: python performance math