367. Valid Perfect Square
Description
Given a positive integer num, return true
if num
is a perfect square or false
otherwise.
A perfect square is an integer that is the square of an integer. In other words, it is the product of some integer with itself.
You must not use any built-in library function, such as sqrt
.
Example 1:
Input: num = 16 Output: true Explanation: We return true because 4 * 4 = 16 and 4 is an integer.
Example 2:
Input: num = 14 Output: false Explanation: We return false because 3.742 * 3.742 = 14 and 3.742 is not an integer.
Constraints:
1 <= num <= 231 - 1
Solutions
Solution 1: Binary Search
We can use binary search to solve this problem. Define the left boundary \(l = 1\) and the right boundary \(r = num\) of the binary search, then find the smallest integer \(x\) that satisfies \(x^2 \geq num\) in the range \([l, r]\). Finally, if \(x^2 = num\), then \(num\) is a perfect square.
The time complexity is \(O(\log n)\), where \(n\) is the given number. The space complexity is \(O(1)\).
1 2 3 4 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Solution 2: Mathematics
Since \(1 + 3 + 5 + \cdots + (2n - 1) = n^2\), we can gradually subtract \(1, 3, 5, \cdots\) from \(num\). If \(num\) finally equals \(0\), then \(num\) is a perfect square.
The time complexity is \(O(\sqrt n)\), and the space complexity is \(O(1)\).
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 |
|
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 10 |
|