You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重排整数的各位数字以得到最小值?算法可行性咨询

如何重排整数各位数字得到最小值?

Hey there! 你的思路完全可行——拆分整数的各位数字再重排确实是解决这个问题的核心方向,不过需要注意一个关键细节:处理前导0的情况,不然可能会得到无效的数字(比如直接排序71440会得到01447,这本质是1447,但实际上正确的最小重排应该是10447,可能你示例里漏写了0?没关系,我们一步步讲清楚)。

具体步骤

  • 拆分各位数字:把输入的整数转换成字符串,逐个拆分为单个字符(或者用数学方法取余拆分,两种方式都可以)。比如输入71440,拆分后得到['7','1','4','4','0']。
  • 从小到大排序:对拆分后的数字字符进行升序排序,排序后得到['0','1','4','4','7']。
  • 处理前导0:如果排序后的第一个字符是0,必须找到第一个非0的数字,将它和第一个位置的0交换——因为整数不能以0开头。比如上面的例子,第一个非0数字是1,交换后得到['1','0','4','4','7']。
  • 拼接成最终结果:把处理后的字符列表拼接成字符串,再转换成整数(如果需要带货币符号,直接在前面加上即可)。

特殊情况处理

  • 如果输入数字是0,直接返回0即可;
  • 如果所有位都是0(比如0000),结果还是0;
  • 如果数字只有一位(比如5),结果就是它本身。

代码示例(Python)

def smallest_rearranged_number(num):
    # 处理输入为0的特殊情况
    if num == 0:
        return 0
    # 拆分数字为单个字符列表
    digits = list(str(num))
    # 升序排序
    digits.sort()
    # 处理前导0的情况
    if digits[0] == '0':
        # 找到第一个非0数字的索引
        for idx in range(1, len(digits)):
            if digits[idx] != '0':
                digits[0], digits[idx] = digits[idx], digits[0]
                break
    # 拼接成整数返回
    return int(''.join(digits))

# 测试用例
print(smallest_rearranged_number(71440))  # 输出: 10447
print(smallest_rearranged_number(7144))   # 输出: 1447
print(smallest_rearranged_number(0))      # 输出: 0

总的来说,你一开始的思路是完全正确的,只要补上处理前导0的步骤,这个算法就可以完美解决问题啦!

内容的提问来源于stack exchange,提问作者Minh Thanh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:07:56