/*
* @lc app=leetcode.cn id=190 lang=typescript
*
* [190] 颠倒二进制位
*/
// @lc code=start
function reverseBits(n: number): number {}
// @lc code=end
function reverseBits(n: number): number {
return parseInt(n.toString(2).padStart(32, '0').split('').reverse().join(''), 2)
}
使用一个变量 res 来保存颠倒后的二进制,每次将 n 的最右位取出给 res,并将 res 左移
这里需要注意,如果只是左移的话,第 32 位的 1 会被当作符号位,所以需要在加一个 >>> 0
function reverseBits(n: number): number {
let res = 0
for (let i = 0; i < 32; i++) {
res = ((res << 1) >>> 0) + (n & 1)
n >>>= 1
}
return res
}
test.each([
{ input: { n: 43261596 }, output: 964176192 },
{ input: { n: 4294967293 }, output: 3221225471 },
])('input: n = $input.n', ({ input: { n }, output }) => {
expect(reverseBits(n)).toBe(output)
})