https://leetcode.com/problems/valid-perfect-square/
判断一个数是不是可以开平方
二分查找
public class Solution { // 先开long再说;多用乘法少用除法,比如判断平方数,mid * mid == num public boolean isPerfectSquare(int num) { int beg = 1; int end = num; while (beg <= end) { long mid = (long) beg + (end - beg) / 2; if (mid * mid == num) { return true; } else if (mid * mid < num) { beg = (int) mid + 1; } else { end = (int) mid - 1; } } return false; } }
平方数 = 1 + 3 + 5 + 7......
public class Solution { public boolean isPerfectSquare(int num) { int i = 1; while (num > 0) { num -= i; i += 2; } return num == 0; } }
牛顿平方法
>>> 无符号右移
public class Solution { public boolean isPerfectSquare(int num) { long x = num; while (x * x > num) { x = (x + num / x) >>> 1; } return x * x == num; } }