1.题目

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

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

示例:

  1. 输入:n = 16
  2. 输出:true
  3. 输入:n = 5
  4. 输出:false
  5. 输入:n = 1
  6. 输出:true

提示:

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

进阶:

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

2.思路

昨天刚做一道3的幂,烦了,毁灭吧:

  1. public boolean isPowerOfFour(int n) {
  2. if (n==1) {
  3. return true;
  4. }
  5. long a=1;//防止溢出
  6. while(true)
  7. {
  8. a=a*4;
  9. if (a==n) {
  10. return true;
  11. }
  12. if (a>n) {
  13. return false;
  14. }
  15. }
  16. }

当然也可以反向:

  1. public boolean isPowerOfFour(int n) {
  2. if (n < 1) {
  3. return false;
  4. }
  5. while (n % 4 == 0) {
  6. n /= 4;
  7. }
  8. return n == 1;
  9. }

接下来的是数学技巧~

342. 4的幂 - 图1

  1. public boolean isPowerOfFour(int num) {
  2. return (num > 0) && (Math.log(num) / Math.log(2) % 2 == 0);
  3. }