题目描述
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt。
示例 1:
输入:16
输出:True
示例 2:
输入:14
输出:False
解法(java版):
解题描述:
1、m^2>4m 在m大于4的时候成立,二分时间复杂度O(logn) 2、第二种方法非二分时间复杂度O(n)
public class Title367 {
public boolean isPerfectSquare(int num) {
if (1 == num) {
return true;
}
long low = 1;
long high = num / 2;
long mid;
while (low <= high) {
mid = low + (high - low) / 2;
long result = mid * mid;
if (result > num) {
high = mid - 1;
} else if (result < num) {
low = mid + 1;
} else {
return true;
}
}
return false;
}
public boolean isPerfectSquare2(int num) {
if (1 == num) {
return true;
}
for (int i = 1; i < num / 2; i++) {
if (i * i == num) {
return true;
}
}
return false;
}
public static void main(String[] args) {
System.out.println(new Title367().isPerfectSquare(9));
}
}
gain:
1、注意超过int值范围