题目描述:
第一次提交:(会超时)
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
方法二:牛顿迭代法(最优解)(泰勒展开式)
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)
其他方法;
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])
方法三:二分法
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]; } }
详解见:https://blog.csdn.net/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