2019年3月31日 LeetCode——69 Java之 x 的平方根

题目要求:

实现 int sqrt(int 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;
    }
}
 
原文地址:https://www.cnblogs.com/xiayanjiao/p/10630748.html