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;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章