LeetCode #231 Power of Two 二的次方

英文原文如下

Given an integer n, return true if it is a power of two. Otherwise, return false.

An integer n is a power of two, if there exists an integer x such that n == 2x.

中文翻譯

給予一個整數 n ,要是它是二的次方就回傳 true,反之則回傳 false

一個整數 n 是二的次數的定義是,要是存在一個整數 x使得 n == 2x

範例及題目限制

進一步: 你可以使用非迭代/遞迴的方式來解決它嗎


解題思路

這一題其實算是挺容易的

首先讓我們先來想想 2X 的範圍,那代表可以先排除 < 0的數字了

再來不用考慮 21/2 這種狀況,我們需要判斷的只有 2、4、8、16…等

C# 解決方案

方案1

public class Solution {
    public bool IsPowerOfTwo(int n) {
        if(n<0){
            return false;
        }

        double nn = n*1.0;
        while(nn>=2)
        {
            nn/=2;
        }
        return nn == 1.0;
    }
}

在這個解答中,我們使用一個浮點數 nn 來確認,這是因為在C#中整數除整數,結果也會是整數

那在我們的遞迴中,就容易得到錯誤的結果

最後因為2的最小次方是 20 也就是 1,所以我們需要判斷最後的結果是否為 1.0

Java解決方案

方案1

class Solution {
    public boolean isPowerOfTwo(int n) {
        if(n<0){
            return false;
        }

        double nn = n*1.0;
        while(nn>=2)
        {
            nn/=2;
        }
        return nn == 1.0;
    }
}

Python3 解決方案

方案1

class Solution:
    def isPowerOfTwo(self, n: int) -> bool:
        if(n<0):
            return False

        while(n>=2):
            n=n/2

        return n == 1

因為python中沒辦法 /= 故得寫成正規的寫法

JavaScript 解決方案

方案1

/**
 * @param {number} n
 * @return {boolean}
 */
var isPowerOfTwo = function(n) {
    if(n<0){
        return false;
    }

    while(n>=2)
    {
        n/=2;
    }
    return n == 1;
};

結論

這一題的第一個解法中,需要注意的就只有各語言之間針對整數相除是不是有甚麼陷阱

像是C# 以及 Java,整數相除必為整數,必須轉換為浮點數才能進行後續的操作

雖然我們用遞迴的方法解決了這一題,但根據題目所說有其他方式的

那我第一個想到的就是用內建的函數,但總感覺怪怪的

這一題我會再去思考一下,想到的話會立刻來更新的

🧡如果這篇文章有幫上你的一點點忙,那是我的榮幸

🧡收藏文章或幫我點個廣告,那都是對我的支持

✅如有任何疑問,歡迎透過留言或messenger讓我知道 !

題目連結 : Power of Two – LeetCode

其他的LeetCode文章

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *