179. 最大数
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2]
输出:"210"
示例 2:
输入:nums = [3,30,34,5,9]
输出:"9534330"
错误思路:
我局限于开始字符相同的字符串只有第一位,殊不知,可能不止一位
错误代码:
只过了16 / 230,想的太麻烦了,纯粹自己记录一下自己书写过程
class Solution:
def largestNumber(self, nums: List[int]) -> str:
n = len(nums)
strlist = list(map(str, nums))
strlist.sort(reverse=True)
res = ''
i = 0
temp = 0
while i < n-1:
if strlist[i][0] != strlist[i+1][0]:
res += strlist[i]
i += 1
else:
a = strlist[i][0]
for j in range(i, n):
if len(strlist[j]) == 1 and strlist[j][0] == a:
temp += 1
elif strlist[j][0] != a:
break
if j == n-1: j += 1
for k in range(i, j-temp, 1):
if int(strlist[k]) > int(a) * int(len(strlist[k]) * '1'):
res += strlist[k]
else:
res += temp * a
break
res += ''.join(strlist[k:j-temp])
i = j
if i <= n-1:
res += strlist[n-1]
return ''.join(res)
正确思路:
思路地址
正确代码:
class Solution:
def largestNumber(self, nums: List[int]) -> str:
strs = map(str, nums)
def cmp(a, b):
if a + b == b + a:
return 0
elif a + b > b + a:
return 1
else:
return -1
strs = sorted(strs, key=functools.cmp_to_key(cmp), reverse=True)
return ''.join(strs) if strs[0] != '0' else '0'