一、题目
二、解题思路
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……哭哭,如果大家知道为什么的话帮帮孩子