题一:题1
看到这道题的时候我就想把它转换成数字来做,感觉是否有些投机取巧?
class Solution:
def addBinary(self, a, b):
x = int(a, 2)
y = int(b, 2)
z = format(x+y, 'b')
return z
这里把x和y转换成十进制数,求和后又转换为二进制数,format格式化输出。
leetcode的官方解答可以看下,有关于位操作的。
题目二:题2
这道题我用很傻瓜的方法做出来了
class Solution:
def mySqrt(self, x):
r = 0
while r * r <= x:
r += 1
return r-1
运行时间感人。官方解说里有二分法,感觉比较好理解:
class Solution:
def mySqrt(self, x: int) -> int:
l, r, ans = 0, x, -1
while l <= r:
mid = (l + r) // 2
if mid * mid <= x:
ans = mid
l = mid + 1
else:
r = mid - 1
return ans
至于高阶的牛顿迭代法没仔细去看。
题3
这道题我也感觉很简单呀,把nums1倒数的几个数换成nums2里面的数字就行,然后用sort排序。
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
if n!=0:
nums1[-n:] = nums2
nums1.sort()
后面发现其实可以直接nums1[:m]+nums2,这样就可以把两个列表合并起来了。
nums1[:] = sorted(nums1[:m] + nums2)
打卡day020
之后会把10~20的仔细整理下,多种解法都看看。Python的特性让我感觉做很多题都是走了捷径/(ㄒoㄒ)/~~