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)))
关键修复点说明:
- 排序逻辑修正:去掉了错误的reverse条件判断,直接设置
reverse=True。用x*3作为排序键是因为当字符串长度不同时(比如"9"和"90"),重复三次后比较能模拟出拼接后的整体大小("999" vs "909090",显然前者更大,所以"9"应该排在"90"前面)。 - 全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
相关产品推荐
相关产品推荐

