LeetCode算法题解 342-4的幂

mac2025-12-03  15

题目描述

题解:

我这里给出三种解法: 1. 循环解法 2. 递归解法 前两种就不用解释了,直接看代码吧。 3. 利用性质【待完成,待学习】

代码:

class Solution { public: bool isPowerOfFour(int num) { /* 1. 循环解法 long long tmp = 1;// 可能num接近INT_MAX,但是tmp*4可能会超出INT_MAX。 for(int i = 0; ; i++) { if(tmp == num) { return true; } if(tmp > num) { return false; } tmp *= 4; } */ /* 2. 递归解法 return isPowerOfFourSubFun(1,num);*/ /* 3.技巧性解法(O(1)的复杂度) 参考自:https://leetcode-cn.com/problems/power-of-four/solution/e-you-shi-yi-dao-zhuang-bi-jie-fa-de-suan-fa-ti-2/ 思路: 1. 发现:2的幂中 同时是4的幂 的数 的二进制数 的奇数位全为1,偶数位全为0 2. 所以只要找到一个足够大的数(32位,去除一位符号位就是31位1),将这个数的奇数位全变成1,偶数位为0,再将要判断的数&这个数,看结果是不是等于原来的数,等于即说明满足4的幂的要求(奇数位为1,偶数位为0) */ if(num <= 0) { return false; } if(num & (num-1))// 4的幂必定是2的幂 { return false; } if((num & 0x55555555) == num)// 判断是不是4的幂 { return true; } return false; } /* 2. 递归解法 bool isPowerOfFourSubFun(long long x,int num) { if(x == num) { return true; } if(x > num) { return false; } return isPowerOfFourSubFun(x*4,num); }*/ };
最新回复(0)