python leetcode 179. Largest Number
阿新 • • 發佈:2018-12-15
基本思路是“大”的數排前面,比如’9’>‘87’
再者是‘42’和‘420’的比較,‘42420’>‘42042’,如果只是單純地在’42’後加’2’變成442>420,這樣會遇到另外一個問題就是‘42’和‘422’的比較,‘42422’>‘42242’。python2裡有cmp,python3裡移除了。所以先用了‘42’*2和‘422’*2這樣的變換。又遇到了問題,‘42’和‘42421’不符合。所以不能簡單地擴充套件一倍,要擴充套件成最長的字串的長度。
class Solution:
def largestNumber(self, nums):
"""
:type nums: List[int]
:rtype: str
"""
nums = [str(x) for x in nums]
maxL = max([len(x) for x in nums])
nums.sort(key=lambda x: x*(maxL//len(x)+1), reverse=True)
if nums and nums[0] == '0': return '0'
return ''.join(nums)
class Solution(object):
def largestNumber(self, nums):
"""
:type nums: List[int]
:rtype: str
"""
def mysort(list1):
maxL=len(max(list1))
tmp = []
for s in list1:
ls=len(s)
if ls==maxL:
tmp.append([s,s])
else:
sortK = s+s[0]*(maxL-ls)
if len(sortK) >=2 and sortK[-2] > sortK[-1]:
f=0
for index in range(len(tmp)):
if tmp[index][1]==sortK:
f=1
break
if f==1:
tmp.insert(index,[s,sortK])
else:
tmp.append([s,sortK])
else:
tmp.append([s,sortK])
a=sorted(tmp,key=lambda tmp:tmp[1],reverse=True)
strkey=''
for k in a:
strkey+=k[0]
return strkey
res=''
dict1={}
zeros=0
for i in range(1,10):
dict1[i]=[]
for n in nums:
if n==9:
res+='9'
elif n==0:
zeros+=1
else:
dict1[int(str(n)[0])].append(str(n))
for j in range(9,0,-1):
if dict1[j]==[]:
continue
res+=mysort(dict1[j])
res=res+'0'*zeros
return '0' if res[0]=='0' else res