题目链接:
https://leetcode.com/problems/power-of-two/description/
描述
Given an integer, write a function to determine if it is a power of two.
算法思想:
算法1:使用递归算法,退出的条件是:当n == 1时,返回true;当n≤0时,返回false。然后递归调用isPowerOfTwo(n/2)。
算法2:考虑2的指数幂的特点,其二进制是最高位为0,其他低位全为0。
故:当n≤0,返回false;
当n<0时,只需返回!(n&(n - 1))。
源代码
/*
算法1:递归算法。
Author:杨林峰
Date:2018.01.01
LeetCode(231):Power of Two
*/
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n == 1)
return true;
if(n <= 0 || n%2)
return false;
return isPowerOfTwo(n/2);
}
};
/*
算法2:非递归算法。
Author:杨林峰
Date:2018.01.01
LeetCode(231):Power of Two
*/
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n <= 0)
return false;
return !(n&(n - 1));
}
};