leetcode 69. Sqrt(x)

此题为求整型变量的平方根
解题的基本思路为二分法,给定 x ,在0 x之间找一个数y,若y平方小于x,(y+1)平方大于x,则y为要找的值。
需要注意的是一些边界的处理,1)0 和 1 比较特殊直接判断输出结果
2)yy会溢出,则比较时不能直接用yy 3)若采用(start+mid)/2计算mid,在计算start+mid时会溢出,采用int mid=start/2.0+end/2.0,double转为int是向下取整,其结果和(start+mid)/2一致。
代码如下:

class Solution {
public:
    int mySqrt(int x) {
        
        int result;
        if(x==0)
            return 0;
        else if(x==1)
            return 1;
        else
        {
            int start=0;
            int end=x;
            while(1)
            {
                int mid=start/2.0+end/2.0;
                double devide=x/(1.0*mid);
                devide=devide/(1.0*mid);
                if(devide>=1)
                    start=mid;
                else
                    end=mid;
                
                if(start+1==end)
                {
                    result=start;
                    break;
                }
            }
            return result;          
        }
               
    }
};

你可能感兴趣的:(刷题)