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

2023-12-15 11:50:04

一、题目

二、解题思路

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……哭哭,如果大家知道为什么的话帮帮孩子

文章来源:https://blog.csdn.net/lbcbjtlhmjq/article/details/135009142
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。