67、二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “1”
输出: “100”
示例 2:
输入: a = “1010”, b = “1011”
输出: “10101”
方法一:首先把两个字符串通过补零的方式对齐,然后进行相加,如果是有进位的,则记录,最后判读最高位是否有进位即可。
class Solution(object):
def addBinary(self, a, b):
s=''
if len(a)<len(b):
a =a[::-1]
while len(a)!=len(b):
a += '0'
a=a[::-1]
elif len(a)>len(b):
b = b[::-1]
while len(a)!=len(b):
b += '0'
b = b[::-1]
print(a,b)
carry = 0
for i in range(len(a)-1,-1,-1):
if a[i]+b[i] == 2:
carry = 1
s += str(0)
else:
tmp = int(a[i])+int(b[i])+carry
if tmp == 2:
s += str('0')
carry =1
else:
s += str(tmp)
carry =0
if carry==1:
s += str('1')
return s[::-1]
print(Solution().addBinary('1001','01001'))
方法二:利用bin()和int()实现二进制与十进制之间的转换
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
a = int(a, 2)
b = int(b, 2)
return bin(a + b)[2:]
69、X的平方根
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。
方法一:利用牛顿迭代法求根,由于返回的是整数根,所以当x<1的时候,直接返回0
class Solution(object):
def mySqrt(self, x):
val, result = 0, x
if x < 1:
return 0
while abs(result - val) > 0.000001:
val = result
result = val - (val ** 2 - x) / (2 * val) # x^2=n -> f(x)=f(x)'+(x-x1)
return int(result)
print(Solution().mySqrt(8))
方法二:利用二分法,以中间值为比较值,每次迭代缩小范围,直到找到那个值
class Solution:
def mySqrt(self, x):
"""
:type x: int
:rtype: int
"""
min = 0
max = x
mid = x//2
while min<=max:
m = mid*mid
if m>x:
max = mid-1
elif m<x:
min = mid+1
else:
return mid
break
mid = (min+max)//2
return mid
print(Solution().mySqrt(8))