题目:
最小数字:
给定一个整型数组,请从该数组中选择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