class Solution {
public boolean isPerfectSquare(int num) {
// 牛顿迭代公式 i = (i + n/i)/2;
// 我们给 i 赋一个 int 类型的正值,同时满足条件 i^2 > num,每次迭代,i都减小,直到i^2 <= nums 为止。
int i = num;
// 当 i^2 >num 时,让 i 迭代减小不断靠近零点,迭代的停止条件是 i^2 - num <= 0,i*i有可能溢出,因此定义为double类型。
while((double)i*i > num){
// 运用迭代公式进行迭代。注意这里的运算式中,i是int类型。
i = (i + num/i)/2;
}
// 迭代停止时,如果 num 是有效的完全平方数,则整数 i 的平方一定等于num,返回true,否则不等,返回false 。
return i*i == num;
}
}