给定一个长度为n的数组nums,数组由一些非负整数组成,现需要将他们进行排列并拼接,每个数不可拆分,使得最后的结果最大,返回值需要是string类型,否则可能会溢出。
数据范围:
,
进阶:时间复杂度
,空间复杂度:)
[30,1]
"301"
[2,20,23,4,8]
"8423220"
[2]
"2"
[10]
"10"
输出结果可能非常大,所以你需要返回一个字符串而不是整数。
let res=[]
let path=[]
nums.sort((a,b)=>a-b)
const back=used=>{ //回溯算法求全排列
if(path.length==nums.length){
res.push(path.join(""))
return
}
for(let i=0;i<nums.length;i++){
if(i>0 && nums[i-1]==nums[i]&&!used[i-1]) continue
if(!used[i]){
used[i]=true
path.push(nums[i])
back(used)
path.pop()
used[i]=false
}
}
}
back([])
if(res.length==0)return 0 //排除【0,0】这个组合
return Math.max(...res) //取排列里面的所有值的最大值 function solve( nums ) {
if(!nums.length) return '';
if(nums.every(item => item === 0)) return nums[0].toString();
nums.sort((a, b) => {
let temp1 = a + '' + b;
let temp2 = b + '' + a;
if(parseInt(temp1, 10) < parseInt(temp2, 10)) {
return 1;
} else {
return -1;
}
return 1;
})
return nums.join('');
}