Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:
不要 使用任何内置的库函数,如 sqrt 。
示例 1:
输入:num = 16
输出:true
示例 2:
输入:num = 14
输出:false
提示:
- 1 <= num <= 2^31 - 1
二、思路分析:
先根据个位数排除不是完全平方数的数 数列An的通项公式是A1=k(大于0的常量),An=(num / An-1 + An-1)/ 2 则当n趋向于无穷大时,An的极限是num的平方根 得到num平方根root的整数部分之后, 通过对比num的个位数是否与root平方的个位数相等来判断是否是完全平方数
三、AC 代码:
class Solution {
public boolean isPerfectSquare(int num) {
int judge = num % 10;
//个位数不能是2,3,7,8
if (judge == 2 || judge == 3 || judge == 7 || judge == 8)
return false;
int resultDigit = ((int) sqrtByRecursive(num)) % 10;
return judge == resultDigit * resultDigit % 10;
}
public double sqrtByRecursive(double num) {
double result = 1;
for (int i = 0; i < 100; i++) {
result = (num / result + result) / 2;
}
return result;
}
}
四、总结:
官方还发了一种牛顿迭代法,学习了。