题目描述
给你一个正整数 num 。如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。
不能使用任何内置的库函数,如 sqrt() 。
问题分析
采用二分法去寻找平方根,最后一定会将数字锁定到某一个整数上,然后比较此整数平方是否等于目标数即可。
时间复杂度在 O ( l o g 2 n ) O(log_2n) O(log2n)
代码
bool isPerfectSquare(int num){int left = 0;int right = num;long long middle = (left+right)/2;if(num==1){return true;}long long n = num;while(left<=right){if(middle*middle>n){right = middle-1;}else if(middle*middle==n){return true;}else{left = middle+1;}middle = (left+right)/2;}if(middle*middle == n){return true;}return false;
}