LeetCode力扣每日一题(Java):69、x 的平方根

一、题目

LeetCode力扣每日一题(Java):69、x 的平方根_第1张图片

二、解题思路

1、 我的思路

我的思路是直接循环暴力破解,定义计数器i,从1开始递增,直到i*i大于或等于x

于是有了如下代码

int i = 1;
        while(true){
            if(i*i

但提交之后超出了时间限制,看来需要改进代码质量

LeetCode力扣每日一题(Java):69、x 的平方根_第2张图片

 哦对了,这是作者写的另一段代码,其实思路和上一段代码基本一样,但是在输入2147395599时却没有得到期望的结果,程序在第一次循环时就return了,输出结果是1073697799,明明i*i>x,为什么循环还是走了if,没走else呢?期待小伙伴们的解答

public class LeetCode69 {
    public static void main(String[] args) {
        System.out.println(mySqrt(2147395599));
    }

    public static int mySqrt(int x) {
        if(x==1){
            return 1;
        }
        int i = x/2;
        while(true){
            if(i*i<=x){
                return i;
            }else{
                i--;
            }
        }
    }
}

LeetCode力扣每日一题(Java):69、x 的平方根_第3张图片

 

2、官方题解

因为官方题解提供了三种方法,我还没搞明白,先空着,到时候补上,我想先搞清楚上一段代码为什么输出结果是1073697799……哭哭,如果大家知道为什么的话帮帮孩子

你可能感兴趣的:(leetcode,算法,职场和发展,java)