题目
思路
使用二分查找 这里最开始我定义了一个long去接受两个比较大的数相乘结果 然后就出现了一些奇奇怪怪的数字,查找资料发现long也是有限制的,两数相乘的结果放不下。这里一定要记住,好像之前python也出现过这样的问题!
代码
class Solution {
public int mySqrt(int n) {
int l = 1;
int r = n/2;
if(n == 1){
return 1;
}
while (l <= r) {
int mid = (l + r) / 2;
//long temp = mid * mid; 数值过大 这里会放不下
//System.out.println("temp"+ temp);
if ((long)mid * mid > n) {
if ((long)(mid - 1) * (mid - 1) < n) {
return mid - 1;
}
r = mid - 1;
}
else if ((long)mid * mid < n) {
if ((long)(mid + 1) * (mid + 1) > n) {
return mid;
}
l = mid + 1;
}
else {
return mid;
}
}
return 0;
}
}
题目
思路
依旧是使用二分查找,代码跟之前的都一样。
代码
class Solution {
public Boolean isPerfectSquare(int n) {
int l = 1;
int r = n/2;
if (n == 1){
return true;
}
while (l <= r) {
int mid = (l + r) / 2;
//long temp = mid * mid; 数值过大 这里会放不下
//System.out.println("temp"+ temp);
if ((long)mid * mid > n) {
r = mid - 1;
}
else if ((long)mid * mid < n) {
l = mid + 1;
}
else {
return true;
}
}
return false;
}
}