LeetCode——2,3,4的幂

题目描述:

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

示例 1:

  • 输入: 1
  • 输出: true
  • 解释: 2^0 = 1

计算2的幂解题思路

  • 若 n = 2^x且 x为自然数(即 n为 2 的幂),则一定满足以下条件:
    • 恒有 n & (n - 1) == 0,这是因为:
      • n 二进制最高位为 1,其余所有位为 0;
      • n - 1 二进制最高位为 0,其余所有位为 1;
    • 一定满足 n > 0。
  • 因此,通过 n > 0 且 n & (n - 1) == 0 即可判定是否满足 n = 2^x。

代码如下:

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

计算3的幂:暴力

class Solution {
    
    
    public boolean isPowerOfThree(int n) {
    
    
        for (int i = 0; ; i++) {
    
    
            if (Math.pow(3, i) == n) {
    
    
                return true;
            }
            if (Math.pow(3, i) > n) {
    
    
                return false;
            }
        }
    }
}

计算4的幂:解题思路

代码如下:

class Solution {
    
    
  public boolean isPowerOfFour(int num) {
    
    
    return (num > 0) && ((num & (num - 1)) == 0) && (num % 3 == 1);
  }
}

猜你喜欢

转载自blog.csdn.net/FYPPPP/article/details/114276029