题目
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路
排序算法,如果 ,则 排在 左边。
代码
# -*- coding:utf-8 -*-
class Solution:
def cmp(self, leftNum, rightNum):
return int(str(leftNum) + str(rightNum)) > int(str(rightNum) + str(leftNum))
def partition(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
def qsort(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)
def PrintMinNumber(self, numbers):
# write code here
if not numbers: return ""
self.qsort(numbers, 0, len(numbers) - 1)
tmp = [str(num) for num in numbers]
return int(''.join(tmp))