367. 有效的完全平方数
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。 说明:不要使用任何内置的库函数,如
sqrt。 示例 1:
输入:16输出:True
示例 2:
输入:14输出:False
解题思路
改造一下 【 x的平方根】 这题 的二分递归版本就可以实现本题了
代码实现1
由findSqrt最后得到的平方根,再来进行一次计算判断从而确认输入是否为完全平方数
//递归版的二分查找int findSqrt(int left,int right,int x){int mid = (left+right)/2;if(left > right)return right;if((long long)mid*mid <= x){return findSqrt(mid+1,right,x);}elsereturn findSqrt(left,mid-1,x);}bool isPerfectSquare(int num){int sqrtX = findSqrt(0,num,num);if( (long long)sqrtX*sqrtX == num)return true;elsereturn false;}
代码实现2
在递归过程中每一次算出的平方根做判断
//递归版的二分查找bool findSqrt(int left,int right,int x){int mid = (left+right)/2;if(left > right)return false;if((long long)mid*mid == x)return true;else if((long long)mid*mid < x)return findSqrt(mid+1,right,x);elsereturn findSqrt(left,mid-1,x);}bool isPerfectSquare(int num){return findSqrt(0,num,num);}
