写在前面
今天我们继续来学习一道难度定义为简单的LeetCode算法题:x 的平方根 。
一个很基础的数据概念,求一个数的平方根,也叫做给一个数值开方。
题目解读
从这道题的描述来看,其实很好理解,就是单纯的数学上的开方。
并且这里还注明了不能使用pow等函数方法,也就是说不能利用编程语言的现成计算方法。
只能自己实现了,那么如何实现呢,我一开始是想偷点懒,直接去看java中pow的源码怎么写的。
不过还是压制住了,打算先自己试着写一下。
想来想去还是使用二分法比较靠谱,只有这样才能快速的找到符合要求的值。
二分法嘛,很典型的一个算法,也是java面试中经常会被问到的一个问题,所以早早就背过了。
大家如果有兴趣可以自行在掘金上搜索一下二分法相关的文章。
代码实现
代码也是使用的二分法来实现的,具体的代码如下:
public class Solution { public static void main(String[] args) { Solution solution = new Solution(); System.out.println(solution.mySqrt(4)); System.out.println(solution.mySqrt(8)); } public int mySqrt(int x) { int l = 0, r = x, result = -1; while (l <= r) { int z = l + (r - l) / 2; if ((long) z * z <= x) { result = z; l = z + 1; } else { r = z - 1; } } return result; } }
执行结果如下:
二分法好像还是比较慢。
其他思路
虽然这里说了不让用pow函数,但是还是想试试,哈哈哈,得到了下面这个执行结果。
总结
本道题的考点在于对平方根的理解,还有就是二分法的使用,对二分法的理解帮助比较大。