Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
367. 有效的完全平方数 - 力扣(LeetCode) (leetcode-cn.com)
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
示例 1:
输入:num = 16
输出:true
示例 2:
输入:num = 14
输出:false
提示:
- 1 <= num <= 2^31 - 1
二、思路分析:
首先根据完全平方数的概念,x*x = num,所以x的取值范围为 1 <= x <= num 所以我们可以在区间1到num之间进行二分查找,在进行二分查找的过程中注意数据的溢出问题
三、AC 代码:
class Solution {
public boolean isPerfectSquare(int num) {
int l = 1; int r = num;
while (l <= r) {
int mid = l + (r - l) / 2;
long square = (long) mid * mid;
if (square == num) {
return true;
} else if (square > num) {
r = mid - 1;
} else if (square < num) {
l = mid + 1;
}
}
return false;
}
}
四、总结:
官方还有个牛顿迭代法,听着很厉害的样子,目前还没有研究,下次再好好研究下,感兴趣的可以看下参考链接。
范文参考:
双百牛顿法 - 有效的完全平方数 - 力扣(LeetCode) (leetcode-cn.com)
有效的完全平方数 - 有效的完全平方数 - 力扣(LeetCode) (leetcode-cn.com)
367. 有效的完全平方数(二分法) - 有效的完全平方数 - 力扣(LeetCode) (leetcode-cn.com)