leetcode-day20-根據數字二進制下 1 的數目排序[1356]

思路: 先將數組排序,再講數組轉成二進制,然後二進制找出每個有多少個數字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;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章