出處: 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 <= 500
0 <= 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 的數量,進行排序。