题目:给一个正整数,判断它是不是完全平方数。
解法:
二分法。给的是int型的正整数,所以下界是1,上界是最大正整数Integer.MAX_VALUE的平方根。但要注意一定要用乘法来判断相等时的情况。下面是代码:
public static int mySqrt(int x) {
if(x == 0) return 0;
int left = 1, right = Integer.MAX_VALUE;
while(true){
int mid = left + (right-left)/2;
if(mid > x/mid)
right=mid-1;
else{
if(mid+1>x/(mid+1))
return (int)mid;
left=mid+1;
}
}
}
public static boolean isPerfectSquare(int num) {
if(num == 0) return true;
int left = 1, right = mySqrt(Integer.MAX_VALUE);
while(right >= left){
int mid = left + (right-left)/2;
if(mid*mid == num)
return true;
else if(mid*mid > num)
right = mid - 1;
else
left = mid + 1;
}
return false;
}
2.数学技巧:所有的完全平方数都可以被表示成奇数和1+3+5+7+9 ...。
public boolean isPerfectSquare(int num) {
int i = 1;
while (num > 0) {
num -= i;
i += 2;
}
return num == 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。