描述
实现函数 int sqrt(int x).
计算并返回 x 的平方根(向下取整)
示例1
输入:2 返回值:1
示例2
输入:2143195649 返回值:46294
思路1:
利用平方数的性质:
连续n个计数相加的结果就是一个平方数:
如:16=1+3+5+7,n=4,16=4*4。9=1+3+5,n=3,9=3*3;4=1+3,n=2,4=2*2。
所以,用x连续减去这些奇数,减的次数就是这些奇数的个数,也就是平方根。
代码如下:
import java.util.*;
public class Solution {
/**
*
* @param x int整型
* @return int整型
*/
public int sqrt (int x) {
int count=0;//次数
int i=1;//奇数
while(x>=0){
x-=i;
count++;
i+=2;
}
return count-1;
}
}
思路2:二分法
代码如下:
import java.util.*;
public class Solution {
/**
*
* @param x int整型
* @return int整型
*/
public int sqrt (int x) {
if(x<=1)
return x;
int left=1;
int right=x;
int mid=0;
while(left<=right){
mid=(left+right)/2;
if(mid==x/mid)
return mid;
if(mid<x/mid)
left=mid+1;
if(mid>x/mid)
right=mid-1;
}
return right;
}
}