好经典的一道题目,早有所耳闻用二分法。知识点是pow(x,y)的运用。简单,但需要特别注意的是1的开方要额外考虑,否则用这种方法开出来是0???晕。。。
class Solution {
public:
int mySqrt(int x) {
if (x == 1) return 1;
int right = x;
int left = 0;
int mid = (right + left) / 2;
while ((left != mid)&&(right!=mid)){
if (pow(mid, 2) > x) {
right = mid;
mid = (right + left) / 2;
}
else if (pow(mid,2)<x){
left = mid;
mid = (right + left) / 2;
}
else return mid;
}
return mid;
}
};
牛顿的神奇开方法是:ans=(ans+x/ans)/2。具体实现就不写了。顺便吐槽一句,做了几道leetcode题感觉自己还是初中生水平啊。。。