📜  下一个更高的数字,且设置的位数相同(1)

📅  最后修改于: 2023-12-03 15:21:28.855000             🧑  作者: Mango

找到下一个更高的数字

有时候,我们需要找到比给定数字更高的下一个数字。本文将介绍如何编写一个函数来实现这个目标。我们假设输入的数字只有正整数,并且数字的位数是固定的(例如,3位数字)。

解决方案

我们可以将数字转换为字符串,然后将字符转换为数字进行比较。具体来说,我们可以从给定数字的最低有效数字开始,依次比较每个数字与其前面的数字大小关系。 如果当前数字大于前面的数字,则说明我们可以找到比给定数字更高的数字了。我们可以将这两个数字交换,然后对当前数字后面的数字进行排序,以得到比给定数字更高的下一个数字。

以下是一个示例实现:

def next_higher_number(num):
    num_str = str(num)
    digits = list(num_str)

    for i in range(len(digits)-1, 0, -1):
        if digits[i] > digits[i-1]:
            digits[i:], next_num = sorted(digits[i:]), digits[i-1]
            j = i
            while digits[j] <= next_num:
                 j += 1
            digits[i-1], digits[j] = digits[j], next_num
            return int(''.join(digits))
    return num

在此实现中,我们将给定的数字转换为字符串,并将其转换为其各个数字的列表。我们从最后一个数字开始向前遍历,找到第一组相邻数字,其中右侧数字比左侧数字大。 将右侧数字视为“更改的数字”,并将其保存在变量next_num中。然后,我们对更改的数字后面的所有数字进行排序,以确保下一个数字是比给定数字更高的数字。最后,我们在排序后的数字中找到下一个数字,并将其与更改的数字交换。最终,我们将更改后的数字列表转换为整数并返回。

测试用例

为了确保我们的代码正常工作,我们可以尝试几个测试用例:

assert next_higher_number(123) == 132
assert next_higher_number(321) == 321
assert next_higher_number(273) == 327
assert next_higher_number(999) == 999
assert next_higher_number(54321) == 54321
assert next_higher_number(1253) == 1325

如果我们的代码能够通过这些测试用例,那么我们就可以确信它能够在大多数情况下正常工作。