一、题目

二、解题思路
1、 我的思路
我的思路是直接循环暴力破解,定义计数器i,从1开始递增,直到i*i大于或等于x
于是有了如下代码
int i = 1;
        while(true){
            if(i*i<x){
                i++;
            }else if(i*i==x){
                return i;
            }else{
                return i-1;
            }
        }但提交之后超出了时间限制,看来需要改进代码质量

哦对了,这是作者写的另一段代码,其实思路和上一段代码基本一样,但是在输入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--;
            }
        }
    }
}

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





![命令执行 [BUUCTF 2018]Online Tool1](https://img-blog.csdnimg.cn/direct/c1207e1e50704e06b908bc1cd3c7badd.png)
![[pluginviteimport-analysis] vite 提示jsx语法报错](https://img-blog.csdnimg.cn/img_convert/4568dc90e485318e926bad3bf2e72ad1.png)












