【刷题笔记】367. 有效的完全平方数

142 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

367. 有效的完全平方数

给定一个 正整数 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;
	}
}

四、总结:

官方还发了一种牛顿迭代法,学习了。

五、参考:

有效的完全平方数 - 有效的完全平方数 - 力扣(LeetCode) (leetcode-cn.com)

2分解决有效完全平方数 - 有效的完全平方数 - 力扣(LeetCode) (leetcode-cn.com)