1.题目

给定一个整数,编写一个函数来判断它是否是 2 的幂次方。

示例:

  1. 输入: 1
  2. 输出: true
  3. 解释: 20次方 = 1
  4. 输入: 16
  5. 输出: true
  6. 解释: 24次方 = 16
  7. 输入: 218
  8. 输出: false

2.思路

先列一个最简单的,用2不断的乘2,然后与数字比较

  1. public boolean isPowerOfTwo(int n) {
  2. if (n==1) {
  3. return true;
  4. }
  5. long a=1;//防止溢出
  6. while(true)
  7. {
  8. a=a*2;
  9. if (a==n) {
  10. return true;
  11. }
  12. if (a>n) {
  13. return false;
  14. }
  15. }
  16. }

当然这里有更优雅的解法:
1.png
图片出自:https://leetcode-cn.com/problems/power-of-two/solution/power-of-two-er-jin-zhi-ji-jian-by-jyd/

    public boolean isPowerOfTwo(int n) {
        return n > 0 && (n & (n - 1)) == 0;
    }