字典排序
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例:
输入: [10,2]
输出: “102”
输入: [3,30,34,5,9]
输出: “3033459”
首先组合成字符串题型,最好开始就把数字转化为字符串,这样避免数字相加后越界,而且使用StringBuffer类,字符串是可变的,还是线程安全的。
数字组合成字符串,还涉及到大小,这里就要排序。而且观察到,第一位数字越小,就应该排在前面。那么这样就可以确定排序规则,也就是两个数x和y,组合后有两种情况,xy或者yx,比较这两个数,xy比yx大,那么y比x更应该放在前面。也就是y"小于"x。这里“小于”是本题意的小,不是直接比较大小。
那就是排序问题,使用快排或者归并排序都可以。这里使用快排,快排利用递归,就一个函数实现即可,之前文章[排序算法总结二] 更快的排序算法有介绍快排。
代码实现
利用快排排序后,使用StringBuffer类进行组合:
class Solution {
public String minNumber(int[] nums) {
int len = nums.length;
if (len == 0) return "";
//数字转为字符串形式</