【leetcode每日一题】2的幂
2的幂
1、题目描述
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
示例1:
输入:n = 1
输出:true
解释:20 = 1
示例2:
输入:n = 16
输出:true
解释:24 = 16
示例3:
输入:n = 4
输出:true
示例4:
输入:n = 5
输出:false
2、算法描述
首先我们可以看一个表
2^x | n | n - 1 | n & (n - 1) |
---|---|---|---|
2^0 | 00010001 | 00000000 | (0001) & (0000) == 0 |
2^1 | 00100010 | 00010001 | (0010) & (0001) == 0 |
2^2 | 01000100 | 00110011 | (0100) & (0011) == 0 |
因此我们可以发现一个规律,假设2的幂为n,那么 n & (n-1) == 0
根据这样的规律,我们就可以得到我们现在的程序
3、代码实现
package com.java;
/**
* @author huangchao
* @date 2021/5/30
*/
public class Day51_Solution {
public boolean isPowerOfTwo(int n) {
return (n & (n-1)) == 0;
}
}