Skip to content

Latest commit

 

History

History
49 lines (39 loc) · 1003 Bytes

190.颠倒二进制位.md

File metadata and controls

49 lines (39 loc) · 1003 Bytes

190.颠倒二进制位

/*
 * @lc app=leetcode.cn id=190 lang=typescript
 *
 * [190] 颠倒二进制位
 */

// @lc code=start
function reverseBits(n: number): number {}
// @lc code=end

解法 1

function reverseBits(n: number): number {
  return parseInt(n.toString(2).padStart(32, '0').split('').reverse().join(''), 2)
}

解法 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
}

Case

test.each([
  { input: { n: 43261596 }, output: 964176192 },
  { input: { n: 4294967293 }, output: 3221225471 },
])('input: n = $input.n', ({ input: { n }, output }) => {
  expect(reverseBits(n)).toBe(output)
})