思路: 先將數組排序,再講數組轉成二進制,然後二進制找出每個有多少個數字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;
};