题目:
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
题意:
给定一个正整数num,写一个功能来判断该正整数是否是一个完全平方数。
note:
不要使用sqrt()等任何内建函数。
思路一:
采用二分搜索,每次找到1到给定数字之间的中间值,然后计算该中间值的平方是否与给定正整数相等,相等则返回为true,否则返回false。
代码:C++版:0ms
class Solution { public: bool isPerfectSquare(int num) { long left = 1, right = num; while(left <= right) { long mid = left + (right - left)/2; if (mid * mid == num) { return true; } else if (mid * mid < num) { left = mid + 1; } else { right = mid - 1; } } return false; } };
思路二:
任何一个完全平方数都可以分解为1 + 3 + 5 + 7 + ...,主要由于(x + 1)^2 - x^2 = 2*x + 1 。
代码:C++版:0ms
class Solution { public: bool isPerfectSquare(int num) { int i = 1; while (num > 0) { num -= i; i += 2; } return num == 0; } };