2020年5月9日 星期六

Leetcode題解 Python & C#:五月挑戰DAY9 Valid Perfect Square

給一個正整數,問其是否為整數的平方。

若以不轉換資料型態來計算,即只用 int 去解決,只要判斷 num 是否在(枚舉)整數的平方。
(這是一種挑戰,不然用Python內建的計算,一句就能非常迅速的解決。)

不過枚舉這樣子太慢了,如果是完美,那 num 可以用兩個相同的因數相乘。

用上找因數,就能避免枚舉很多不必要的數字,也不會有怕溢位的問題。

如果使用二分搜尋法加速,又會面臨溢位的問題,但處理好後速度會快不少。

Python(基本)
class Solution:
    def isPerfectSquare(self, num: int) -> bool:
        def isValid(x):
            ans = x*x
            if ans < num: return isValid(x+1)
            elif ans > num: return False
            else: return True
        return isValid(1)
C#(因數拆解)
public class Solution {
    public bool IsPerfectSquare(int num) {
        int a = num; int b = 1;
        while(a>b)
        {
            a /= 2; 
            b *= 2;
        }            
        for(int i = a; i <= b; i++)
            if(i*i == num){return true;}
        return false;
    }
}