【每日刷题】x 的平方根
69. x 的平方根 - 力扣(LeetCode)
方法一:暴力
从0开始遍历,直到 ans*ans > x 为止,这时ans-1就是答案。需要注意可能会爆int,所以ans要开为long,最后再转换为int。
class Solution {public int mySqrt(int x) {long ans = 0;while(ans * ans <= x){ans++;}return (int)ans-1;}
}
方法二:二分
这道题很适合用二分来做,甚至题解就是标准的二分模板。
如果开方为整数,会从return mid语句返回。因为非整数是向下取整,所以结果返回l-1。
class Solution {public int mySqrt(int x) {long l = 0, r = x;while(l <= r) {long mid = l + (r - l) / 2;if(mid * mid == x) {return (int)mid;}if(mid * mid < x) {l = mid + 1;} else {r = mid - 1;}}return (int)(l - 1);}
}
当然这里也可以像官方题解一样,直接合并小于和等于,额外赋值ans=mid,无论开方是否为整数,最后都返回ans即可。
class Solution {public int mySqrt(int x) {int l = 0, r = x, ans = -1;while (l <= r) {int mid = l + (r - l) / 2;if ((long) mid * mid <= x) {ans = mid;l = mid + 1;} else {r = mid - 1;}}return ans;}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/sqrtx/solutions/238553/x-de-ping-fang-gen-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。