Sqrt(x)
Implement int sqrt(int x)
.
Compute and return the square root of x.
分析:
方案一:遍历0~n, 第一次出现 i * i > n,返回 i-1即可。
方案二:
二分搜索:
(1) 当n = 0, 或者 n = 1时,返回 n
(2) 初始化 s = 0, e = n; //注意e的取值不能超过INT_MAX的开方值,即e不大于46341,否则 mid * mid 值有可能会溢出,导致计算结果出错。
(3) 当 s < e 时,mid = (s + e)/2;
当mid * mid < n时, s = mid;
当mid * mid > n时, e = mid;
当mid * mid = n时,return mid.
当s + 1 = e时,说明s * s < n < (s + 1) * (s + 1), 即 s为所求值。否则,继续执行该循环。
1 class Solution 2 { 3 public: 4 int sqrt(int n) 5 { 6 int m = n; 7 if(n == 0 || n == 1) 8 return n; 9 10 int s = 0, e = n, mid = 0; 11 if(e > 46341) 12 e = 46341; 13 14 while(s < e) 15 { 16 mid = (s + e)/ 2; 17 if(mid * mid < n) 18 s = mid; 19 else if(mid * mid > n) 20 e = mid; 21 else 22 return mid; 23 24 if(s + 1 == e) 25 return s; 26 } 27 } 28 };