/*
* @lc app=leetcode.cn id=231 lang=typescript
*
* [231] 2 的幂
*/
// @lc code=start
function isPowerOfTwo(n: number): boolean {}
// @lc code=end
2 的幂次方必定大于 0,然后检查数字的二进制只有一个 1,其余全是 0,利用 n&(n-1)
可以消除二进制最后一个 1,那如果消除之后数字为 0,则说明这个数字是 2 的幂次方.
function isPowerOfTwo(n: number): boolean {
return n > 0 && !(n & (n - 1))
}
test.each([
{ input: { n: 1 }, output: true },
{ input: { n: 16 }, output: true },
{ input: { n: 3 }, output: false },
{ input: { n: 4 }, output: true },
{ input: { n: 5 }, output: false },
{ input: { n: 0 }, output: false },
])('input: n = $input.n', ({ input: { n }, output }) => {
expect(isPowerOfTwo(n)).toEqual(output)
})