69. x 的平方根|刷题打卡

236 阅读1分钟

一、题目描述:

实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入:4
输出:2

示例 2:

输入:8
输出:2
解释:8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

二、思路分析:

思路一:

拿到这个题目,第一想法就是循环。条件i * i < x && (i + 1) * (i + 1) > x。介于两个连续数的平方之间。然后考虑特殊情况;如果是0,直接返回;如果等于i*i,返回i(即1);如果等于(i + 1) * (i + 1),返回i+1;其余情况,i++。

思路二:

想思路一的时候,突然想到:pow这个方法。。。
只能说,此方法果然好用。

三、AC 代码:

方法一:

function mySqrt(x: number): number {
    let i = 0;
    while (i <= x/2) {
    if (x === 0) return 0;
        if (i * i < x && (i + 1) * (i + 1) > x) return i;
        else if(i * i === x) return i;
        else if ((i  + 1) * (i + 1) === x) return i + 1;
        else i++;
    }
};

方法二:

function mySqrt(x: number): number {
     if (x === 0) return 0;
     return Math.floor(Math.pow(x,0.5));
};

四、总结:

有时候借助数学自带的方法简单很多。看了官方题解,说实话一头懵。

题目来源:leetcode。
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情