輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。
排序演算法,如果nu
m1+n
um2m2+n
um1 num
1+nu
m2
m2+n um 1,則nu m1n um 1排在nu m2n um 2左邊。# -*- coding:utf-8 -*-
class
solution:
defcmp
(self, leftnum, rightnum):
return int(str(leftnum) + str(rightnum)) > int(str(rightnum) + str(leftnum))
defpartition
(self, numbers, left, right):
leftindex = left
tmp = numbers[left]
while left <= right:
while left <= right and
not self.cmp(numbers[left], tmp): left += 1
while left <= right and self.cmp(numbers[right], tmp): right -= 1
if left <= right: numbers[left], numbers[right] = numbers[right], numbers[left]
numbers[leftindex], numbers[right] = numbers[right], numbers[leftindex]
return right
defqsort
(self, numbers, left, right):
if left < right:
part = self.partition(numbers, left, right)
self.qsort(numbers, left, part - 1)
self.qsort(numbers, part + 1, right)
defprintminnumber
(self, numbers):
# write code here
ifnot numbers: return
"" self.qsort(numbers, 0, len(numbers) - 1)
tmp = [str(num) for num in numbers]
return int(''.join(tmp))
劍指offer 把陣列排成最小的數
華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 10 5 題目描述 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。解析 比大小即可,不過比的時候是從從左往右比。注意到字母長度有...
劍指offer 把陣列排成最小的數
輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。分析 將int型的陣列轉化為string型的陣列,再將string型的陣列排序,排序規則依據比較兩個string變數相加後的大小 注意這個cmp...
劍指offer 把陣列排成最小的數
題目 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。分析 題目要求比較整數陣列組成後的數的大小,在int及long中來處理很容易超出範圍,實際上大數問題一般放在字串中來處理。我們把陣列元素兩...