数组排成最小的数_剑指offer45

题目描述

输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

示例

输入: [3,30,34,5,9]
输出: "3033459"

解题思路

本题的关键在于排序的判断
1、 a + b > b + a ====> a > b, a 在 b 的后面
2、 a + b < b + a ====> b < a, a 在 b 的前面

思路一:

  1、将所有数组的数值都转换为对应的字符串;
  2、使用Array.sort()重写比较器,后使用 a + b > b + a来进行快排,使用字符串的compareTo()进行比较;
  3、使用StringBuilder把排序后的字符串数组串起来;
  

思路二:

  1、将所有数组的数值都转换为对应的字符串;
  2、自己重写快排,在快排中,用两指针从收尾同时进行搜索
  3、使用StringBuilder把排序后的字符串数组串起来;

思路三:

  1、将所有数组的数值都转换为对应的字符串;
  2、自己重写快排,在快排中,用两指针同时从数组起始位置开始搜索,当快指针找到<= r的值时,进行swap,最后wap 参考值r和慢指针停留的位置      
  3、使用StringBuilder把排序后的字符串数组串起来;

思路四:

  1、使用整数进行快速排序
  2、排序算法: a*(10的(b的长度次方)) + b vs b*(10的(a的长度次方)) + a =======> 结果和数组形式的 a + b > b + a 一致,使用double来承接
  3、使用StringBuilder把排序后的字符串数组串起来;

语言积累

1、Array.sort()方法中的对比起的重写

Array.sort(data[], new comparator<>(){
    public int compare(data1, data2){
    return int
    }
});

2、String.compareTo()
3、各种类型的转换

 String.valueOf();
 Integer.valueOf();
 
    

vscode链接

https://github.com/lunaDolphin/leetcode/tree/master/queue_offer_45
https://github.com/lunaDolphin/leetcode/tree/master/queue_offer_45_1
https://github.com/lunaDolphin/leetcode/tree/master/queue_offer_45_2
https://github.com/lunaDolphin/leetcode/tree/master/queue_offer_45_3

你可能感兴趣的:(java,排序,算法,数组)