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 }
View Code

其实这里有一个非常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  阅读(2185)  评论(0编辑  收藏  举报

导航