给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
注意:不要使用任何内置的库函数,如 sqrt
。
示例 1:
输入: 16 输出: True
示例 2:
输入: 14 输出: False
归功于:
特别感谢 @elmirap 添加此问题并创建所有测试用例。
思路:
采用二分法,每次把整个数组分为[start.mid),mid,(mid,end]三部分,如果找到就返回答案,否则缩小范围继续搜索,注意,这种搜索一定保证搜索范围包含解。
代码如下:
bool isPerfectSquareCore(int num,int start,int end) {
if (start <= end) {
long long mid = start + (end - start) / 2;
long long sq=mid*mid;
if (sq==num) {
return true;
}
if (num >sq) {
return isPerfectSquareCore(num, mid + 1, end);
}
else {
return isPerfectSquareCore(num, start, mid-1);
}
}
return false;
}
bool isPerfectSquare(int num) {
if (num <= 0) {
return false;
}
if(num==1){
return true;
}
return isPerfectSquareCore(num,1,num/2+1);
}
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
注意:不要使用任何内置的库函数,如 sqrt
。
示例 1:
输入: 16 输出: True
示例 2:
输入: 14 输出: False
归功于:
特别感谢 @elmirap 添加此问题并创建所有测试用例。