1. 程式人生 > >python leetcode 179. Largest Number

python leetcode 179. Largest Number

基本思路是“大”的數排前面,比如’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