• 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;
        }
    }
     
  • 相关阅读:
    Fizz Buzz 问题
    旋转字符串
    合并排序数组
    尾部的零
    A + B 问题
    CentOS6.x安装RabbitMQ
    MySql游标
    MySql存储过程
    找出n个自然数(1,2,3,……,n)中取r个数的组合
    正则表达式
  • 原文地址:https://www.cnblogs.com/xiayanjiao/p/10630748.html
Copyright © 2020-2023  润新知