如何重排整数的各位数字以得到最小值?算法可行性咨询
如何重排整数各位数字得到最小值?
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
相关产品推荐
相关产品推荐

