leetcode 69. Sqrt(x)

博客介绍了用二分法求整型变量平方根的解题思路。在 0 到给定值 x 之间找数 y,若 y 平方小于 x 且 (y+1) 平方大于 x,y 即为所求。同时强调了边界处理,如 0 和 1 特殊判断,避免平方和加法运算溢出等,并给出代码。

此题为求整型变量的平方根
解题的基本思路为二分法,给定 x ,在0 x之间找一个数y,若y平方小于x,(y+1)平方大于x,则y为要找的值。
需要注意的是一些边界的处理,1)0 和 1 比较特殊直接判断输出结果
2)yy会溢出,则比较时不能直接用yy<x,采用除法计算,再和1进行比较。
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;          
        }
               
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值