劍指offer 把陣列排成最小的數

2021-08-18 18:06:52 字數 867 閱讀 5124

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。

思路:首先因為陣列可能非常長,所以要定義乙個整數類,使得其大小可以容納所有的陣列元素組成的數不大現實。因此我們直接輸出這個陣列,讓其看起來像乙個整數,這樣我們就可以把問題轉化為:如何給這個陣列排序,使其看做乙個數字的時候最小。

第乙個想到的可能是按字典序排序,小的在前面。可惜這個是不可行的,比如32的字典序比322小,但是32322比32232大,

所以在這裡自定義乙個比較大小的函式,比較兩個字串s1, s2大小的時候,先將它們拼接起來,比較s1+s2,和s2+s1那個大,如果s1+s2大,那說明s2應該放前面,所以按這個規則,s2就應該排在s1前面。

# -*- coding:utf-8 -*-

class solution:

def printminnumber(self, numbers):

# write code here

if not numbers:

return ""

nums = [str(i) for i in numbers]

nums = sorted(nums, cmp=self.compare)

return int("".join(nums))

def compare(self, num1, num2):

p = num1+num2

q = num2+num1

if p > q:

return 1

elif p < q:

return -1

else:

return 0

劍指offer 把陣列排成最小的數

華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 10 5 題目描述 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。解析 比大小即可,不過比的時候是從從左往右比。注意到字母長度有...

劍指offer 把陣列排成最小的數

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。分析 將int型的陣列轉化為string型的陣列,再將string型的陣列排序,排序規則依據比較兩個string變數相加後的大小 注意這個cmp...

劍指offer 把陣列排成最小的數

題目 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。分析 題目要求比較整數陣列組成後的數的大小,在int及long中來處理很容易超出範圍,實際上大數問題一般放在字串中來處理。我們把陣列元素兩...