给定一个长度为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(''); }