[LeetCode] 231. 2的幂 ➕ 326. 3的幂 ➕ 342. 4的幂

1 题目描述

  1. 2的幂:
    给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
  2. 3的幂:
    给定一个整数,写一个函数来判断它是否是 3 的幂次方。
  3. 4的幂:
    给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。

2 解题思路

  • 万能解法:-- 循环解决

让n去循环除以要判断的那个数,取余循环判断

对于2来说,代码如下:

class Solution {
    public boolean isPowerOfTwo(int n) {
        if(n == 0){
            return false;
        }
        while(n % 2 ==0){
            n = n / 2;
        }
        return n == 1;


    }
}
  • 位运算解法:
    针对2来说的:
    移位运算:把二进制数进行左右移位。左移1位,扩大2倍;右移1位,缩小2倍。
return (n>0) && (1<<30) % n == 0;

解释:1<<30得到最大的2的整数次幂,对n取模如果等于0,说明n只有因子2。

针对3 来说,代码如下

class Solution {
    public boolean isPowerOfThree(int n) {
        //3的幂次的质因子只有3,而所给出的n如果也是3的幂次,
        //故而题目中所给整数范围内最大的3的幂次的因子只能是3的幂次,
        //1162261467是3的19次幂,是整数范围内最大的3的幂次
        return (n >0 ) && (1162261467%n) == 0;

    }
}

3 解决代码

3和4的万能解法代码:

class Solution {
    public boolean isPowerOfThree(int n) {
        if(n == 0){
            return false;
        }
        while(n % 3 ==0){
            n = n / 3;
        }
        return n == 1;

    }
}
class Solution {
    public boolean isPowerOfFour(int num) {
        if(num == 0){
            return false;
        }
        while(num % 4 == 0){
            num = num/4;
        }
        return num == 1;

    }
}
发布了259 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43584847/article/details/104526012