出處: https://leetcode.com/problems/sort-integers-by-the-number-of-1-bits/
You are given an integer array arr. Sort the integers in the array in ascending order by the number of 1‘s in their binary representation and in case of two or more integers have the same number of 1‘s you have to sort them in ascending order.
Return the array after sorting it.
Example 1:
Input: arr = [0,1,2,3,4,5,6,7,8] Output: [0,1,2,4,8,3,5,6,7] Explantion: [0] is the only integer with 0 bits. [1,2,4,8] all have 1 bit. [3,5,6] have 2 bits. [7] has 3 bits. The sorted array by bits is [0,1,2,4,8,3,5,6,7]
Example 2:
Input: arr = [1024,512,256,128,64,32,16,8,4,2,1] Output: [1,2,4,8,16,32,64,128,256,512,1024] Explantion: All integers have 1 bit in the binary representation, you should just sort them in ascending order.
Constraints:
1 <= arr.length <= 5000 <= arr[i] <= 104
/**
* @param {number[]} arr
* @return {number[]}
*/
var sortByBits = function(arr) {
return arr.sort((a, b) => {
const aBits = a === 0 ? 0 : a.toString(2).match(/1/g).length
const bBits = b === 0 ? 0 : b.toString(2).match(/1/g).length
return aBits - bBits || a - b
})
};
toString()
這個 api 可以帶一個變數 radix,預設是轉換為 10 進位。 如果帶入 2 則是轉換為 2 進位。
這邊的做法轉成 2 進位的字串,然後計算字串內 1 的數量,進行排序。
