数组组成的最小数字

题目:

最小数字:
给定一个整型数组,请从该数组中选择3个元素组成最小数字并输出(如果数组长度小于3,则选择数组中所有元素来组成最小数字)。

输入描述:
一行用半角逗号分割的字符串记录的整型数组,0 < 数组长度 <= 100,0 < 整数的取值范围 <= 10000。

输出描述:
由3个元素组成的最小数字,如果数组长度小于3,则选择数组中所有元素来组成最小数字。

示例 1:
输入
21,30,62,5,31
1
输出
21305
1
说明
数组长度超过3,需要选3个元素组成最小数字,21305由21,30,5三个元素组成的数字,为所有组合中最小的数字

示例 2:
输入
5,21
1
输出
215
1
说明
数组长度小于3,选择所有元素组成最小值,215为最小值

解题思路:

1.如果数组长度为1,那么直接返回这个数组元素即可。

2.如果数组长度为2,则比较这两个元素分别放在前面的大小。

3.如果数组长度大于等于3,则需要先进行排序,选出最小的三个元素组成新的数组。三个元素的排序,应该是根据字符的首字符大小进行排序,因为首字符小的数字我们应该放到前面,来使数字尽可能的小。比如:5,21,21的第一个字符为2,5为5,因此应该将21放到前面,来使字符串拼接后的值最小。

4.sort默认就是按照字符串大小进行排序,判断两个数拼接出来的结果首字符大小,从小到大进行排序。
 

代码:

function minNum(arr) {
    if(arr.length == 1) {
        return arr[0]
    }else if(arr.length == 2) {
        let num1 = arr[0].toString() + arr[1].toString()
        let num2 = arr[1].toString() + arr[0].toString()
        console.log(num1<num2?num1:num2)
    }else{
        arr.sort((a,b)=>a-b)
        let minNum = arr.slice(0,3)
        minNum.sort((a,b)=>{
            return (a.toString()+b.toString()) - (b.toString()+a.toString())
        })
        let res = ''
        for(let s of minNum) {
            res += s
        }
        console.log(res)
    }
    
}   

console.log(minNum([21,30,62,5,31]))

//打印结果:
21305

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值