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

2021-08-20 21:26:45 字數 1416 閱讀 3350

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為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中來處理很容易超出範圍,實際上大數問題一般放在字串中來處理。我們把陣列元素兩...