leetcode 342. 4的幂(Power of Four)

题目描述:

给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。

示例 1:

    输入: 16
    输出: true

示例 2:

    输入: 5
    输出: false

进阶:

你能不使用循环或者递归来完成本题吗?


解法:

class Solution {
public:
    // method 1:
    bool isPowerOfFour1(int num){
        if(num <= 0){
            return false;
        }else{
            while(num % 4 == 0){
                num >>= 2;
            }
            return num == 1;
        }
    }
    
    // method 2:
    bool isPowerOfFour2(int num){
        if(num <= 0){
            return false;
        }else{
            // 100
            // 10000
            // 1000000
            long long max_val = pow(2, 32);
            long long odd_ones = 0xaaaaaaaa;
            // first, num must have single '1';
            // second, the '1' must be at odd position (from right to left)
            if(max_val%num == 0 && (num & odd_ones) == 0){
                return true;
            }else{
                return false;
            }
        }
    }
    
    bool isPowerOfFour(int num) {
        // return isPowerOfFour1(num);
        return isPowerOfFour2(num);
    }
};

猜你喜欢

转载自www.cnblogs.com/zhanzq/p/10574903.html