题目要求:
实现 int sqrt(int x)
函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4 输出: 2
示例 2:
输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
思路:
题目要求实现x的平方根,最后结果只保留整数部分。很容易的想到用二分法。
代码示例:
class Solution { public int mySqrt(int x) { int high=x; int low=0; while(low<=high){ long mid=(high+low)/2; if(mid*mid>x){ high=(int)mid-1; } if(mid*mid<x){ low=(int)mid+1; } if(mid*mid==x){ return (int)mid; } } return high; } }
注意:low和high都是int型,mid是long,所以在赋值转换的时候,long转int要使用强制转换,eg: high=(int)mid-1;另外二分法在确定位置时,即把mid指针所指的值转换为
high时,要减1,转换为low时,要加1.否则的话最后结果会变成死循环,程序无法走出判断条件,进而运行时间超时。
第二种思路:暴力法
class Solution { public int mySqrt(int x) { if(x>=2147483647) return 46340; int result=0; for(int i=0;i<46341;i++){ if(i*i==x){ result=i; } if(i*i<x && (i+1)*(i+1)>x){ result=i; } } return result; } }