LeetCode 2的幂

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

示例 1:

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

示例 2:

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

示例 3:

输入: 218
输出: false

方法一:暴力判断法。

class Solution {
public:
	bool isPowerOfTwo(int n) {
		while (n != 1) {
			if (n == 0 || n % 2 == 1) {//两种特例
				return false;
			}
            n /= 2;//倍减
		}
		return true;
	}
};

方法二:暴力递归法(上面的方法改写为递归)。

class Solution {
public:
	bool isPowerOfTwo(int n) {
		if (n == 1) {
			return true;
		}
		else if (n == 0 || n % 2 == 1) {//如果是零、奇数
			return false;
		}
		else {
			return isPowerOfTwo(n / 2);//否则继续判断
		}
	}
};

在这里插入图片描述
方法三:不难发现,如果一个数是2的次幂,那么这个数的二进制必定形如“10000”,“100”,“10000000”。那么n&(n - 1)== 0

class Solution {
public:
	bool isPowerOfTwo(int n) {
        if (n <= 0) {//如果n小于等于零必定不是2的次幂
            return false;
        }
		return (n & (n - 1)) == 0;
	}
};

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41855420/article/details/88084644
今日推荐