一、题目描述:
实现 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。
作者:ClyingDeng
链接:https://juejin.cn/post/6935720452950065160
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。