一、题目题目描述给定一组整数非负重排顺序后输出一个最大的整数。示例1输入[10,9]输出910说明:输出结果可能非常大所以你需要返回一个字符串而不是整数。输入描述数字组合输出描述最大的整数示例1输入10 91输出910二、代码fromfunctoolsimportcmp_to_keydefcompare(x,y):# 比较 x y 和 y x 的大小ifxyyx:return-1# x 排在 y 前面elifxyyx:return1# y 排在 x 前面else:return0deflargest_number(nums):# 将数字列表转换为字符串列表str_numslist(map(str,nums))# 使用自定义比较函数排序str_nums.sort(keycmp_to_key(compare))# 拼接结果result.join(str_nums)# 处理前导零的情况例如输入 [0, 0]结果应为 0ifresult[0]0:return0returnresult# 示例输入nums[10,9,12]print(largest_number(nums))# 输出: 910说明三、核心代码说明1. 自定义比较函数compare(x, y)defcompare(x,y):# 比较 x y 和 y x 的大小ifxyyx:return-1# x 排在 y 前面elifxyyx:return1# y 排在 x 前面else:return0核心思想比较两个数字字符串x和y时不是直接比较x和y的大小而是比较xy和yx的字典序。例如比较 “9” 和 “10”910 910109 109因为910 109所以9应该排在10前面返回值含义-1x排在y前面Python 的cmp_to_key中-1表示x y即x排在前面1y排在x前面0两者相等2. 主函数largest_number(nums)deflargest_number(nums):# 将数字列表转换为字符串列表str_numslist(map(str,nums))# 使用自定义比较函数排序str_nums.sort(keycmp_to_key(compare))# 拼接结果result.join(str_nums)# 处理前导零的情况例如输入 [0, 0]结果应为 0ifresult[0]0:return0returnresult步骤解析类型转换list(map(str, nums))将所有整数转换为字符串便于字符串拼接比较自定义排序str_nums.sort(keycmp_to_key(compare))使用functools.cmp_to_key将传统的比较函数转换为key函数结果拼接.join(str_nums)将排序后的字符串列表拼接成最终结果边界处理如果结果以 ‘0’ 开头如输入[0, 0]直接返回0避免输出003. 算法复杂度时间复杂度O(n log n)主要来自排序操作空间复杂度O(n)需要存储字符串列表4. 关键点总结贪心策略通过局部最优两两比较达到全局最优字符串拼接比较解决数字位数不同时的比较问题前导零处理确保边界情况正确Python 排序技巧使用cmp_to_key实现自定义比较规则5. 示例执行流程以输入[10, 9, 12]为例转换为字符串[10, 9, 12]排序比较比较 “9” 和 “10”“910” “109” → “9” 在前比较 “9” 和 “12”“912” “129” → “9” 在前比较 “12” 和 “10”“1210” “1012” → “12” 在前最终顺序[9, 12, 10]拼接结果912106. 新示例详细比较[10, 9, 12, 8]以输入[10, 9, 12, 8]为例演示完整的排序比较过程转换为字符串[10, 9, 12, 8]排序比较过程使用自定义compare函数比较 “9” 和 “10”910 910109 109因为910 109所以 “9” 排在 “10” 前面。比较 “12” 和 “10”1210 12101012 1012因为1210 1012所以 “12” 排在 “10” 前面。比较 “8” 和 “10”810 810108 108因为810 108所以 “8” 排在 “10” 前面。比较 “9” 和 “12”912 912129 129因为912 129所以 “9” 排在 “12” 前面。比较 “9” 和 “8”98 9889 89因为98 89所以 “9” 排在 “8” 前面。比较 “12” 和 “8”128 128812 812因为128 812为假128 812所以 “8” 排在 “12” 前面。确定最终顺序根据上述两两比较结果排序后的顺序为[9, 8, 12, 10]。拼接结果981210验证我们可以手动验证981210是否是最大整数9812109 8 12 109128109 12 8 10→ 比较981210 912810981210更大。8912108 9 12 10→981210 891210。其他排列均小于981210。因此对于输入[10, 9, 12, 8]算法输出的最大整数为981210。