比较规则:对于任意两个数字 x 和 y,我们将它们拼接成两种顺序的字符串:x + y 和 y + x,然后比较它们的大小。若 x + y 小于 y + x,则 x 应该排在前面;反之,则 y 排在前面。
排序:根据上述的比较规则,将数字按顺序排列。
去除前导零:排序后得到的数字可能会有前导零,特别是当数组中包含多个零时。需要去除这些前导零。
特殊情况:如果排序后的数字全部是零(例如输入的是 [0, 0, 0]),则最终结果应该是 “0”。
from functools import cmp_to_key
defmin_combination(arr):# 自定义比较函数:比较拼接后的两个字符串的大小defcompare(x, y):# 比较 x + y 和 y + x 两种拼接方式的结果return-1if x + y < y + x else1if x + y > y + x else0# 使用 sorted 排序数组,排序的依据是自定义的比较函数
sorted_arr =sorted(arr, key=cmp_to_key(compare))# 将排序后的数组拼接成一个字符串,并去除前导零
result =''.join(sorted_arr).lstrip('0')# 如果拼接结果为空字符串(说明原始数组全是零),返回 '0'return result if result else'0'if __name__ =="__main__":# 输入数组并进行处理
arr =input().split()# 输出最小组合数字print(min_combination(arr))
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
java解法
解题思路
本题要求将若干个数字组合成一个最小的数字。在解决过程中,我们需要考虑两方面:
数字排序规则:对于每一对数字,比较它们的拼接顺序。例如,两个数字 a 和 b,我们需要比较 a + b 和 b + a,然后决定它们的顺序。拼接后较小的排列应该排在前面。
评论记录:
回复评论: