leetcode sqrt

来源:互联网 发布:淘宝仅退款不退货规则 编辑:程序博客网 时间:2024/05/17 21:07

这题是给出一个x,求平方根。
一种直接二分,一种牛顿迭代求不动点。
二分:

class Solution {public:    bool isAns(long long r, long long x)    {        if (r*r<=x && (r + 1)*(r + 1)>x)            return true;        return false;    }    int mySqrt(int x) {        if (x <= 0)            return 0;            long tar = x;        long long  low = 0,high= x;        long long mid = low + (high - low) / 2;        while (!isAns(mid, tar))        {            if ((mid + 1)*(mid + 1) <= tar)            {                low = mid+1;            }            else{                high = mid-1;            }            mid = low + (high - low) / 2;        }        return mid;    }};

牛顿法:

#include <math.h>class Solution{public:    int mySqrt(int x) {        if (x <= 0)            return 0;        double init = x / 2.0;        double ans =  init* 0.5 + x / (2 * init);        while (fabs(ans - init) > 0.005)        {            init = ans;            ans =  init* 0.5 + x / (2 * init);        }        return (int)ans;    }};
0 0
原创粉丝点击