题意:
给你一个整数 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
提示:
-2^31 <= n <= 2^31 - 1
**进阶:**你能够不使用循环/递归解决此问题吗?
题目来源: https://leetcode.cn/problems/power-of-two/description/
解题方法:
方法一:循环
/*** @param Integer $n* @return Boolean*/// 循环function isPowerOfTwo($n) {$x = 0;$s = 1;while($n >= $s){if($n == $s){return true;}$x++;$s = pow(2,$x);}return false; }
方法二:递归
//递归function isPowerOfTwo($n) {if($n == 1) {return true;}if($n % 2 != 0 || $n == 0){return false;}return $this->isPowerOfTwo($n / 2);}
方法三:(进阶)位运算
//位运算//2 的幂转化为二进制,首位为 1,其他都为 0. n & (n - 1) = 0//注意运算符的优先级,用括号处理function isPowerOfTwo($n) {return $n > 0 && (($n & ($n - 1)) == 0);}