題目:輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印出最小的一個數。
輸入[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]的情況