剑指offer 33 把数组排成最小的数
2017-10-11 10:35
316 查看
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路
———–吐槽————悲催!
上个房子的网打不开牛客,半个多月没刷剑指offer!
搬家了,终于可以开始了!
———–end————
最暴力的解法是找出数组所有组合情况,把所有组合情况最小的数字输出,时间复杂度O(n!)。
可以转化成排序问题。因为数组整体最小,取任意前一部分也是最小的,也就是从左到右依次递增排列,比较规则是ab
代码
# -*- coding: UTF-8 -*- # -*- coding:utf-8 -*- class Solution: def partition(self, numbers, start, end): tmp = numbers[start] startindex = start while start < end: while start < end and (str(numbers[end]) + str(tmp)) >= (str(tmp) + str(numbers[end])): end -= 1 while start < end and (str(numbers[start]) + str(tmp)) <= (str(tmp) + str(numbers[start])): start += 1 if start < end: numbers[start], numbers[end] = numbers[end], numbers[start] # numbers[start] = tmp numbers[start], numbers[startindex] = numbers[startindex], numbers[start] return start def qsort(self, numbers, start, end): pivot = self.partition(numbers, start, end) if start < pivot - 1: self.qsort(numbers, start, pivot - 1) if pivot + 1 < end: self.qsort(numbers, pivot + 1, end) def PrintMinNumber(self, numbers): # write code here if len(numbers) == 0: return '' self.qsort(numbers, 0, len(numbers) - 1) res = '' for tmp in numbers: res += str(tmp) return res
相关文章推荐
- 剑指Offer之面试题33:把数组排成最小的数
- 剑指Offer面试题33把数组排成最小的数,面试题34丑数
- 剑指offer面试题33:把数组排成最小的数
- 剑指Offer 33 把数组排成最小的数
- 【剑指Offer学习】【面试题33:把数组排成最小的数】
- 剑指Offer面试题33(java版):把数组排成最小的数
- 剑指offer 面试33 把数组排成最小的数
- 【剑指offer-解题系列(33)】把数组排成最小的数
- 剑指Offer:面试题33 把数组排成最小的数
- 【剑指Offer学习】【面试题33:把数组排成最小的数】
- 剑指offer33 把数组排成最小的数
- 剑指Offer----面试题33:把数组排成最小的数
- Leetcode (8) Largest Number (剑指offer 33题 把数组排成最小的数)
- 剑指offer-面试题33-把数组排成最小的数
- 剑指Offer——面试题33:把数组排成最小的数
- 【剑指offer】题33:数组排成最小的数
- 【剑指offer】5.2时间效率——面试题33:把数组排成最小的数
- 剑指offer33:把数组排成最小的数
- 剑指offer 面试题33—把数组排成最小的数
- 剑指offer-5-面试33:把数组排成最小的数(时间效率)