leetcood学习笔记-69-x的平方根

本文详细解析了LeetCode第69题“x 的平方根”的多种解题方法,包括直接遍历、牛顿迭代法、二分法等,并对比了它们的优劣。同时,对Python中的位运算进行了简要说明。

题目描述:

 

第一次提交:(会超时)

class Solution:
    def mySqrt(self, x: int) -> int:
        if x==0 or x==1:
            return x
        for i in range(1,x):
            if i*i<=x and (i+1)**2>x:
                return i
View Code

 方法二:牛顿迭代法(最优解)(泰勒展开式)

class Solution:
    def mySqrt(self, x):
        """
        :type x: int
        :rtype: int
        """
        if x <= 1:
            return x
        r = x
        while r > x / r:
            r = (r + x / r) // 2
        return int(r)
View Code

其他方法;

class Solution:
    def mySqrt(self, x):
        '''
        :type x: int
        :rtype: int
        '''
        num_sqrt = x ** 0.5
        x_str = str(num_sqrt)
        result = x_str.split('.', 1)
        return int(result[0])
View Code

 方法三:二分法

class Solution {
    public int mySqrt(int x) {
         int max[] = {0};
         if (x==1) {
        return 1;
    }
        if(46340*46340<=x
){
            return 46340;
        }
     for (int i = 0; i <= x/2; i++) {
        if (i*i<=x) {
            max[0]=i;
        }
        else {
            break;
        }
    }
    return max[0];
    
    }
}
View Code

详解见:https://blog.youkuaiyun.com/sgs595595/article/details/85940224

python中的>>:

>> 和 <<都是位运算,对二进制数进行移位操作。
<< 是左移,末位补0,类比十进制数在末尾添0相当于原数乘以10,x<<1是将x的二进制表示左移一位,相当于原数x乘2。比如整数4在二进制下是100,4<<1左移1位变成1000(二进制),结果是8。
>>是右移,右移1位相当于除以2。
而>>=和<<=,就是对变量进行位运算移位之后的结果再赋值给原来的变量,可以类比赋值运算符+=和-=可以理解。
比如x>>=2, 就是把变量x右移2位,再保留x操作后的值。

转载于:https://www.cnblogs.com/oldby/p/10522246.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值