关于java:数组排成最小的数剑指offer45

41次阅读

共计 1046 个字符,预计需要花费 3 分钟才能阅读完成。

题目形容

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

示例

 输出: [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

正文完
 0