[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;

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章