問題描述:
給定一個正整數 num,編寫一個函數,如果 num 是一個完全平方數,則返回 True,否則返回 False。
說明:不要使用任何內置的庫函數,如 sqrt
。
示例 1:
輸入:16 輸出:True
示例 2:
輸入:14 輸出:False
基本思路:
使用夾逼二分的思路。
AC代碼:
class Solution {
public:
bool isPerfectSquare(int num) {
int left = 1, right = num;
while (left < right) {
int mid = left + (right - left) / 2;
if (mid < num / mid) left = mid + 1;
else right = mid;
}
// 注意left*left會溢出
return long(left) * long(left) == long(num)? true : false;
}
};
其它經驗:
注意如果使用乘法很容易造成溢出。如果原來是int,可以換爲long long