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; } }