思路: 先将数组排序,再讲数组转成二进制,然后二进制找出每个有多少个数字1,放入对象中,这步很重要,对象中用两个属性,一个属性放1的个数,一个放序号,再给数组对象排序,最后数组对象中的序号属性代表的值就是最终结果。
/**
* @param {number[]} arr
* @return {number[]}
*/
var sortByBits = function(arr) {
if(arr.length === 0) return null;
// 将数字转成二进制
let twoStrArr = [], numArr = [], result = [];
arr.sort((a, b) => {
return a - b;
})
for(let i=0;i<arr.length;i++){ // 转成二进制
twoStrArr.push(parseInt(arr[i]).toString(2));
}
for(let i=0;i<twoStrArr.length;i++){
let num = 0;
let obj = {};
for(let j=0;j<twoStrArr[i].length;j++){
if(Number(twoStrArr[i][j]) === 1){
num ++;
}
}
obj.id = num;
obj.order = arr[i];
numArr.push(obj);
}
numArr.sort((a, b) =>{
return a.id - b.id;
})
numArr.map(item =>{
result.push(item.order);
})
return result;
};