给定一个非负整数数组,将它们排成一个尽可能大的数,
例如,给定数组[9, 81, 6, 35, 3, 30],那最后得到的最大数是981635330.
"""
问题的实质是,新建一种规则判断两个数字的大小,
即 从左往右 依次比较两个数字的各位上的数,直到比到其中一个数字的最后一位
"""
## 获取数据: 非负整数数组
# x = input()
# x = list(map(int, eval(x)))
x = [9, 81, 6, 35, 3, 30]
def num_max(num1, num2):
"""使用新建的规则判断两个数字的大小"""
num1str, num2str = str(num1), str(num2)
n1, n2 = len(num1str), len(num2str)
for i in range(min(n1, n2)):
if num1str[i] > num2str[i]:
return num1
elif num1str[i] < num2str[i]:
return num2
else:
if i == min(n1, n2)-1:
if n1 <= n2:
return num1
else:
return num2
x_order = []
def get_in_order(x):
"""调整原始数组中元素的位置,使按照新规则从大到小"""
if not x:
return
max_i = x[0]
for i in range(1, len(x)):
max_i = num_max(max_i, x[i])
x_order.append(str(max_i))
x.remove(max_i)
get_in_order(x)
get_in_order(x)
print(''.join(x_order)) # 输出拼接的最大数字,以字符串的形式