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