https://leetcode.com/problems/valid-perfect-square/#/solutions
Given a positive integer num, write a function which returns True if num is a perfect square else False. Note: Do not use any built-in library function such as sqrt. Example 1: Input: 16 Returns: True Example 2: Input: 14 Returns: False Credits: Special thanks to @elmirap for adding this problem and creating all test cases.
数学问题常考虑是否越界, 用long?
public boolean isPerfectSquare(int num) {
int beg = 1, end = num / 2 + 1;
while (beg + 1 < end) {
int mid = beg + (end - beg) / 2;
if (num / mid == mid && num % mid == 0) {
return true;
} else if (num / mid < mid) {
end = mid;
} else {
beg = mid;
}
}
if (num / beg == beg && num % beg == beg || num / end == end && num % end == 0) {
return true;
} else {
return false;
}
}