剣指offer(11)配列を最小数にするpython

1110 ワード

タイトル記述は正の整数配列を入力し、配列内のすべての数字をつなぎ合わせて1つの数に並べ、つなぎ合わせることができるすべての数字の中で最小の1つを印刷します.例えば配列{3,32321}を入力すると、この3つの数字が並べられる最小数字は321323となる.
# -*- coding:utf-8 -*-
class Solution:
    def compare(self,num1,num2):
        t = str(num1)+str(num2)
        s = str(num2)+str(num1)
        if t>s:
            return 1
        elif t

考え方は簡単で、リストの中の数を2つ文字列で加算し、サイズを比較してソートし、最後にソート数列を統合することです.ここでsort関数のcmpパラメータについてお話ししますが、このパラメータはpy 3にはもうありません.具体的には、ソート対象リストの要素を2つ比較し、正に戻ると、yが前xより後、いいえxが前yより後という2つの位置を交換します.
例:
def mycmp1(x,y):  #    
    return x-y
def mycmp2(x,y): #    
    return y-x
    #    
numbers = [5,2,9,7]
def mycmp1(x,y):
        return x-y
numbers.sort(cmp = mycmp1)
print numbers

>>>
[2, 5, 7, 9]

#    
numbers = [5,2,9,7]
def mycmp2(x,y):
        return y-x
numbers.sort(cmp = mycmp2)
print numbers

>>>
[9,7,5,2]