题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印出最小的一个数。
输入[3,32,321] 打印出 321323
思路:穷举得出最小值
const getArrPl = arr =>{
if(!Array.isArray(arr)){
return false;
}
const getFun = arr => {
if(arr.length <=1){
return arr;
}
let res = [];
for(let i = 0;i<arr.length;i++){
let newS = arr[i];
let newStr = getFun(arr.slice(0,i).concat(arr.slice(i+1)))
// console.log(newStr);
for(let j = 0;j<newStr.length;j++){
res.push(newS.toString() + newStr[j].toString());
}
}
return res;
}
let res = getFun(arr)
return Math.min(...res);
}
思路:使用内置sort函数,找出一种排列的规律,排序输出
const goodPl = arr =>
Array.isArray(arr)?parseInt(arr.sort((a,b)=>{
let sa = parseInt(a).toString()
let sb = parseInt(b).toString()
let flag = false;
sa.length > sb.length && ([sa,sb] = [sb,sa],flag = true)
for(let i = 0 ;i<sa.length;i++){
if(sa[i] != sb[i]){
return !flag ? sa[i] - sb[i]:sb[i]-sa[i]
}
}
let j = sa.length;
while(sb[j] === sb[sa.length-1] && j<sb.length){
j++;
}
// console.log(j);
if( j !== sb.length){
return flag?sb[j]-sb[sa.length-1]:sb[sa.length-1] - sb[j];
}
return 1;
// return flag? 1:-1;
}).join('')):false;
这里注意[1,12]的情况和[1,10]的情况