367. 有效的完全平方數
給定一個 正整數 num ,編寫一個函數,如果 num 是一個完全平方數,則返回 true ,否則返回 false 。
進階:不要 使用任何內置的庫函數,如 sqrt 。
示例 1:輸入:num = 16
輸出:true示例 2:輸入:num = 14
輸出:false
提示:
- 1 <= num <= 2^31 - 1
解題思路
使用二分法,因為數字的平方是具有單調性的,因此我們可以選擇[1,num]作為搜索區間,當mid的平方大于num時,我們在縮小區間為左邊區間,反之當mid的平方小于num時,我們在縮小區間為右邊區間。
代碼
class Solution {
public:bool isPerfectSquare(int num) {int l(1),r(num);while (l<=r){int mid=(r-l)/2+l;if ((long long )mid*mid==num)return true;else if ((long long )mid*mid<num)l=mid+1;else r=mid-1;}return false;}
};