Implement int sqrt(int x)
.
Compute and return the square root of x.
x is guaranteed to be a non-negative integer.
Example 1:
Input: 4 Output: 2
Example 2:
Input: 8 Output: 2 Explanation: The square root of 8 is 2.82842..., and since we want to return an integer, the decimal part will be truncated.
题目的意思就是实现一个整数开方操作。
第一种方法就是调用python的内置函数啊
return int(math.sqrt(x))
第二种方法就是运用二分法的操作来实现啊。具体的关键点在代码中有说明啊
if x<2:
return x
left,right=0,x
while left<=right: #为什么要有等于啊 当left=right时,继续进入循环,让right--,进而跳出循环。此时正确值是存储在lstmid中的啊
mid=left+(right-left)/2
if mid*mid < x:
#left=mid
left=mid+1
lstmid=mid #关键步骤啊,对于5这种情况啊
elif mid*mid>x:
# right=x
right=mid-1
else:
return mid
return lstmid
上面这种二分法不直观,主要是因为那个mid取值的是一个除法取整的方法,导致每次都会有一个正1或者一个负1的偏差,进而导致需要一个lstmid的取值来保存一个中间值的状态啊。下面这个二分法更为直接些。代码中的具体细节有说明。
if x<2:
return x
left,right=0,x
result=1
while abs(result-x) > 0.000001: #不能等于0
mid=left+(float(right-left))/2 #要加个float,python2.x中/根据除数被除数情况来决定是否精确除法还是取整除法,python3.x中/精确除法,//整除
result=mid*mid
if mid*mid < x:
#left=mid
left=mid
else:
# right=x
right=mid
return int(mid)