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

Posted xiayanjiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    }
}

 

 

以上是关于2019年3月31日 LeetCode——69 Java之 x 的平方根的主要内容,如果未能解决你的问题,请参考以下文章

实验报告(2019年4月31日)

2019年10月31日 万能异常

在 2019 年 10 月 31 日之前更新您的 Amazon RDS SSL/TLS 证书

2019年3月6日 980. Unique Paths III

2019年7月31日(基本功练习1)

行政区划代码之当前(截止2019年12月31日)