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

题意:

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

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

示例 1:

输入:n = 16
输出:true

示例 2:

输入:n = 5
输出:false

示例 3:

输入:n = 1
输出:true

提示:

  • -2^31 <= n <= 2^31 - 1

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

题目来源: https://leetcode.cn/problems/power-of-four/description/

解题方法:

方法一:循环

// 循环
function isPowerOfFour($n) {
    $index = 0;
    $res = 1;
    while($n >= $res){
        if($n == $res){
            return true;
        }
        $index++;
        $res = pow(4, $index);
    }
    return false;
}

方法二:递归

 // 递归
function isPowerOfFour($n) {
    if($n == 1){
        return true;
    }
    if($n % 4 != 0 || $n == 0){
        return false;
    }
    return $this->isPowerOfFour($n / 4);
}

方法三:位运算

//位运算
function isPowerOfFour($n) {
    return $n > 0 && ($n & ($n - 1)) == 0 && $n % 3 == 1;
	//右移
	 //if($n == 0) return false;
         //$num= $n; 
        //while($num% 4 === 0 ) {
            //$num>>=  2;
        //}
     //return $num== 1;

作者:Jesse
链接:https://leetcode.cn/problems/power-of-four/solutions/265829/zuo-yi-by-shin_php/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
}

参考:
作者:Kuriv
链接:https://leetcode.cn/problems/power-of-four/solutions/56941/php-by-kuriv-55/
来源:力扣(LeetCode)

方法四:把数转换成四进制数; 满足条件的数一定只有在某一位上,然后进行检测是否只有一个,排除掉负数,剩下的就是满足条件的

function isPowerOfFour($n) {
     if($n > 0) {
         $convert = base_convert($n, 10, 4);   //将传入的数转为四进制字符串
         if(str_replace('0', '', $convert) == '1'){
             return true;
         }
     }
     return false;
 }

参考:
作者:Wenyi1995
链接:https://leetcode.cn/problems/power-of-four/solutions/233929/zhuan-huan-wei-si-jin-zhi-by-wenyi1995/
来源:力扣(LeetCode)

你可能感兴趣的:(PHP,php,算法,数据结构)