一、题目描述:
实现 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 春招闯关活动」, 点击查看 活动详情。