LeetCode:Sqrt(x) 解题报告
Sqrt(x)
Implement int sqrt(int x)
.
Compute and return the square root of x.
SOLUTION 1:
参见:二分法总结,以及模板:http://t.cn/RZGkPQc
1 public class Solution { 2 public int sqrt(int x) { 3 if (x == 1 || x == 0) { 4 return x; 5 } 6 7 int left = 1; 8 int right = x; 9 10 while (left < right - 1) { 11 int mid = left + (right - left) / 2; 12 int quo = x / mid; 13 14 if (quo == mid) { 15 return quo; 16 // mid is too big 17 } else if (quo < mid) { 18 right = mid; 19 } else { 20 left = mid; 21 } 22 } 23 24 return left; 25 } 26 }
其实这里有一个非常trick地地方:
就是当循环终止的时候,l一定是偏小,r一定是偏大(实际的值是介于l和r之间的):
比如以下的例子,90开根号是9.48 按照开方向下取整的原则, 我们应该返回L.
以下展示了在循环过程中,L,R两个变量的变化过程
1. System.out.println(sqrt(90));
L R
1 45
1 23
1 12
6 12
9 12
9 10
9
2. System.out.println(sqrt(20));
1 10
1 5
3 5
4 5
4
3. System.out.println(sqrt(3));
1 2
GITHUB:
https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/divide2/Sqrt.java
posted on 2015-01-02 22:59 Yu's Garden 阅读(2188) 评论(0) 编辑 收藏 举报