給一個正整數,問其是否為整數的平方。
若以不轉換資料型態來計算,即只用 int 去解決,只要判斷 num 是否在(枚舉)整數的平方。
(這是一種挑戰,不然用Python內建的計算,一句就能非常迅速的解決。)
不過枚舉這樣子太慢了,如果是完美,那 num 可以用兩個相同的因數相乘。
用上找因數,就能避免枚舉很多不必要的數字,也不會有怕溢位的問題。
如果使用二分搜尋法加速,又會面臨溢位的問題,但處理好後速度會快不少。
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; } }