每天一道leetcode69-x的平方根
- 2019 年 10 月 4 日
- 筆記
前言
2018.10.31号打卡,今天你坚持了吗?
题目
leetcode 69 x的平方根
中文链接:
https://leetcode-cn.com/problems/sqrtx/
英文链接:
https://leetcode.com/problems/sqrtx/
分类:二分查找这一类
题目详情
实现 int sqrt(int x)
函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4输出: 2
示例 2:
输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去
题目详解
思路
- 这个题目的话,使用二分查找,left是1,high是数字x;
- 就是一个二分查找,不懂二分查找的看我的这篇文章,
- 每次去计算mid*mid与数字x的大小,如果比x大,那么就令high去等于mid-1;比x小,就令low等于mid+1;等于x,那么直接返回mid;
代码
class Solution { public int mySqrt(int x) { long low = 1; long high = x; while(low < high) { long mid = low + (high - low) / 2; if(mid * mid == x) return (int)mid; else if(mid * mid > x) high = mid - 1; else low = mid + 1; } if(low * low > x) return (int)(low - 1); return (int)low; } }
- 思路就是我上面说的思路,其中要注意的就是,由于mid*mid的大小很可能会超过int的最大取值,所以这里,把low,high,mid用long来表示;
- 还有一点要注意的就是由于题目中要求返回的是int,所以这里应该最后进行类型转换;
- 15-16行代码就是代表,low的平如果比x大,那么由于是向下取整,所以返回low-1;第17行代码,就表示low的平方是小于x的,那么直接返回low即可