LeetCode 69. Sqrt(x) 解题报告
来源:互联网 发布:腾讯qq软件管理 编辑:程序博客网 时间:2024/05/17 08:17
LeetCode 69. Sqrt(x) 解题报告
题目描述
Implement int sqrt(int x).
Compute and return the square root of x.
示例
没有给出。
限制条件
没有明确给出。
解题思路
这道题很虐心,我首先用的是牛顿迭代法解题,但是一直在2147395600和214739599这两个数出问题,于是改成用二分法,然而,还是载在这两个数据上,通过艰苦卓绝地debug调试才终于过了,下面分别讲解这两种解法,并贴出AC的代码。
二分法:
二分法就是不断更新结果所属的上界和下界来逼近结果,比如求9的平方根,一开始设置结果的界限为[0, 9],中间点取整后是4(
具体实现中需要根据题目调整参数,比如数据类型需要为long long,循环的结束条件是low > high以及返回的是(low + high) / 2。请见下面代码1.
牛顿迭代法:
牛顿迭代法同样是通过迭代来逼近结果的解法。它将求平方根的问题转化为求
接下来结合下图对迭代过程进行讲解:
首先假设一个解为
由于
上式得到就是递推的公式,不断使用该公式得到
下面贴出来的牛顿迭代法代码是大神的解答代码,真是简洁优雅。
代码
二分法
class Solution {public: int mySqrt(int x) { if (x < 2) return x; long long low = 0, high = x, result = 0; while(high >= low) { result = (low + high) / 2; if (result * result > x) high = result - 1; else if (result * result < x) low = result + 1; else break; } return (low + high) / 2; }};
牛顿迭代法
class Solution {public: int mySqrt(int x) { long r = x; while (r * r > x) r = (r + x / r) / 2; return r; }};
总结
这道题花了很长时间,以前我不知道求平方根有二分法和牛顿迭代法,所以花了时间去理解这两种算法,原理很容易理解,但是实现时却出现了各种问题,需要耐心调试。
通过这道题我学会了牛顿迭代法,并知道了二分法的另一个应用,感觉收获很大,下周继续加油~
- [leetcode] 69. Sqrt(x) 解题报告
- [Leetcode] 69. Sqrt(x) 解题报告
- LeetCode 69. Sqrt(x) 解题报告
- LeetCode Sqrt(x) 解题报告
- LeetCode-Sqrt(x)-解题报告
- [LeetCode] Sqrt(x) 解题报告
- Leetcode 69. Sqrt(x) 开根号 解题报告
- Leetcode 69. Sqrt(x) 解题报告【C库函数sqrt(x)模拟-求平方根】
- Sqrt(x)解题报告
- [LeetCode]sqrt(int x)解题报告之二分查找
- leetCode 69.Sqrt(x) (平方根) 解题思路和方法
- [LeetCode] Sqrt(int x)解题报告之无限逼近(牛顿法)
- LeetCode 69. Sqrt(x)
- LeetCode 69.Sqrt(x)
- LeetCode --- 69. Sqrt(x)
- [Leetcode] 69. Sqrt(x)
- [leetcode] 69.Sqrt(x)
- Leetcode-69.Sqrt(x)
- java内存溢出相关的学习笔记
- Cpu,内存,硬盘,指令之间的关系
- centos7安装java
- 数字翻转
- centos自动安装mysql
- LeetCode 69. Sqrt(x) 解题报告
- 分数化小数
- cookie、session机制解释
- HTML5
- perform_faces_reorientation
- 剑指offer 表示数值的字符串
- 在servlet用getOutputStream输出中文问题
- 502和504错误区别
- (转载)ACM题集以及各种总结大全!