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