0%

给一组长度不定的数求这些数组合出的最大整数

0x00 问题

一个题目:

给一组长短不一的数字,求这组数字前后链接能组成的最大整数。
87 879 8787组成最大整数为8798787

0x01 思路

解题思路:

类比排序,按一定的比较方法比较大小,最大的在最前面,依次排列就可以组成最大整数。

那么这里的关键是两个输入数字的比较函数的定义。定义如下:

  1. 逐位比较两个输入数字,出现更大的数字者返回较大
  2. 如果两个输入数字中较短数字是另一个数字的前导,则递归比较较长数字的剩余部分和共同部分

2举个例子:

 **比较8787887**:

第一次比较,87为前导相同部分,则比较87887;87又相同,则比较887;相同部分是8,故比较剩余7和相同部分8,所以结果返回87878<87
显然8787887>8787878

0x02 代码

这里只写比较函数

1
2
3
4
5
6
7
8
9
10
def compare(intStr1, intStr2):
leng = min(len(intStr1), len(intStr2))
for i in xrange(leng):
if intStr1[i] > intStr2[i]:
return 1
elif intStr1[i] < intStr2[i]:
return -1
if leng == len(intStr1) == len(intStr2):
return 0
return compare(intStr1[:leng], intStr1[leng:]+intStr2[leng:])
丢个钢镚