剑指 Offer 45. 把数组排成最小的数
作者:互联网
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 1:
输入: [10,2]
输出: "102"
示例 2:
输入: [3,30,34,5,9]
输出: "3033459"
解题思路:
此题求拼接起来的最小数字,本质上是一个排序问题。设数组 numsnums 中任意两数字的字符串为 xx 和 yy ,则规定 排序判断规则 为:
- 若拼接字符串 x + y > y + x ,则 x “大于” y;x排在y右边
- 反之,若 x + y < y + x ,则 x “小于” y ;x排在y左边
<font size="3>根据以上规则,套用任何排序方法对 numsnums 执行排序即可。
算法流程:
- 把数组转化为字符串数组
- 应用定义排序,对字符串数组进行排序
- 拼接排好序的字符串,并返回
代码如下:
var minNumber = function(nums) {
//利用数组join方法将数组中所有的元素放入字符串,然后利用split方法把一个字符串分割为字符串数组
nums = nums.join("|").split("|");
//利用sort自定义排序,join连接字符串
nums = nums.sort(function(a,b){
//判断组合后的大小
if(parseInt(a+b) < parseInt(b+a)) return -1;
return 1;
}).join("")
return nums
};
标签:排成,nums,Offer,45,拼接,数组,字符串,join,排序 来源: https://blog.csdn.net/weixin_44995917/article/details/118891091