1.题目
给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4^x
示例:
输入:n = 16输出:true输入:n = 5输出:false输入:n = 1输出:true
提示:
- -2^31 <= n <= 2^31 -1
进阶:
- 你能不使用循环或者递归来完成本题吗?
2.思路
昨天刚做一道3的幂,烦了,毁灭吧:
public boolean isPowerOfFour(int n) {if (n==1) {return true;}long a=1;//防止溢出while(true){a=a*4;if (a==n) {return true;}if (a>n) {return false;}}}
当然也可以反向:
public boolean isPowerOfFour(int n) {if (n < 1) {return false;}while (n % 4 == 0) {n /= 4;}return n == 1;}
接下来的是数学技巧~
public boolean isPowerOfFour(int num) {return (num > 0) && (Math.log(num) / Math.log(2) % 2 == 0);}
