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

Python自定义排序实现数组元素拼接最大数的代码问题排查

修复数组拼接最大数值的Python代码

原代码的核心问题出在两个地方:

  • 排序的反转逻辑完全错误:不管数组里有没有0,都需要降序排列才能得到最大拼接值,原代码里的条件判断完全搞反了逻辑,没有0的时候反而不反转,导致得到的是最小拼接结果。
  • 没处理全0的特殊情况:如果输入全是0,拼接后会输出一串0,正确结果应该是单个"0"。

下面是修复后的代码:

T = int(input("Enter number of test cases: "))

for _ in range(T):
    N = int(input())
    array = list(map(int, input().split()))
    
    array = list(map(str, array))
    # 核心排序逻辑:通过比较a+b和b+a的大小来确定顺序,降序排列
    array.sort(key=lambda x: x * 3, reverse=True)
    
    largest_num = ''.join(array)
    # 处理全0的情况,转成整数再转回字符串自动去重多余的0
    print(str(int(largest_num)))

关键修复点说明:

  1. 排序逻辑修正:去掉了错误的reverse条件判断,直接设置reverse=True。用x*3作为排序键是因为当字符串长度不同时(比如"9"和"90"),重复三次后比较能模拟出拼接后的整体大小("999" vs "909090",显然前者更大,所以"9"应该排在"90"前面)。
  2. 全0处理:把拼接后的字符串转成整数再转回字符串,这样如果是全0的情况,"000..."会变成"0",符合预期输出。

举个测试用例对比:

  • 输入数组[3,30,34,5,9],修复后排序后是['9','5','34','3','30'],拼接结果是9534330,正确。
  • 输入数组[0,0,0],修复后输出0,而不是000。

内容的提问来源于stack exchange,提问作者Syed Sameer Sohail

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:24:55