《算法通关村——幂运算问题解析》

《算法通关村——幂运算问题解析》

2 的幂

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false

如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。

示例 1:

输入:n = 1
输出:true
解释:20 = 1

示例 2:

输入:n = 16
输出:true
解释:24 = 16

示例 3:

输入:n = 3
输出:false

示例 4:

输入:n = 4
输出:true

示例 5:

输入:n = 5
输出:false

提示:

  • -231 <= n <= 231 - 1

题解

二的幂肯定二进制中只有一个1,所以通过 n&(n-1) 是二进制中的最后一个 1 变为 0,此时如果最后一个1 变为 0 了,那么结果就为 0 了。

class Solution {
    public boolean isPowerOfTwo(int n) {
        // if(n<=0){
        //     return false;
        // }
        // while(n % 2==0){
        //     n /=2;
        // }
        // return n == 1;
        return n > 0 && (n&(n-1)) == 0;
    }
}

3 的幂

给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false

整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x

示例 1:

输入:n = 27
输出:true

示例 2:

输入:n = 0
输出:false

示例 3:

输入:n = 9
输出:true

示例 4:

输入:n = 45
输出:false

提示:

  • -231 <= n <= 231 - 1

题解

class Solution {
    public boolean isPowerOfThree(int n) {
        if(n <= 0){
            return false;
        }
        while(n%3==0){
            n /= 3;
        }
        return n == 1;
    }
}

4 的幂

给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false

整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x

示例 1:

输入:n = 16
输出:true

示例 2:

输入:n = 5
输出:false

示例 3:

输入:n = 1
输出:true

提示:

  • -231 <= n <= 231 - 1

思路

《算法通关村——幂运算问题解析》_第1张图片

代码

class Solution {
    public boolean isPowerOfFour(int n) {
        // if(n <= 0){
        //     return false;
        // }
        // while(n % 4 == 0 ){
        //     n/=4;
        // }
        // return n==1;
        return n > 0 && (n & (n-1)) ==0 && (n & 0xaaaaaaaa)==0;
    }
}

点击链接:我正在「编程导航」和朋友们讨论有趣的话题,你⼀起来吧?

也可以加我QQ(2837468248)咨询说明来意!

你可能感兴趣的:(算法学习,算法)