leetcode #67 Add Binary
代码如下:
class Solution:
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
if len(a)<len(b):
for i in range(len(b)-len(a)):
a='0'+a
elif len(a)>len(b):
for i in range(len(a)-len(b)):
b='0'+b
l=len(a)
flag=0
ret=''
for i in range(l):
ret=str((int(a[l-1-i])+int(b[l-1-i])+flag)%2)+ret
flag=int((int(a[l-1-i])+int(b[l-1-i])+flag)/2)
if flag==1:
ret='1'+ret
return ret
解题思路:
此题一开始我所采用的方法是将两个二进制字符串转换成两个十进制数,然后相加后再转换为二进制数字符串。但发现这样会存在溢出的问题。所以我采用了将较短的字符串前填充0,直到两个字符串等长,再从后向前按位相加,并存储一个进位变量。每个加出来的数放在结果字符串的最前端。
Leetcode #74 Search a 2D Matrix
代码如下:
class Solution:
def searchRow(self,matrix,target,begin,end):
if begin+1==end:
return begin
if target<matrix[int((begin+end)/2)][0]:
return self.searchRow(matrix,target,begin,int((begin+end)/2))
elif target>matrix[int((begin+end)/2)][0]:
return self.searchRow(matrix,target,int((begin+end)/2),end)
elif target==matrix[int((begin+end)/2)][0]:
return int((begin+end)/2)
def searchCol(self,matrix,target,begin,end):
if begin+1==end:
return begin
if target<matrix[0][int((begin+end)/2)]:
return self.searchCol(matrix,target,begin,int((begin+end)/2))
elif target>matrix[0][int((begin+end)/2)]:
return self.searchCol(matrix,target,int((begin+end)/2),end)
elif target==matrix[0][int((begin+end)/2)]:
return int((begin+end)/2)
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
if len(matrix)==0:
return False
if len(matrix[0])==0:
return False
if target<matrix[0][0]:
return False
if target>matrix[len(matrix)-1][len(matrix[0])-1]:
return False
row=self.searchRow(matrix,target,0,len(matrix))
col=self.searchCol(matrix,target,0,len(matrix[0]))
for i in range(len(matrix[0])):
if matrix[row][i]==target:
return True
for i in range(len(matrix)):
if matrix[i][col]==target:
return True
return False
解题思路:
对行列分别进行二分搜索,然后在搜索出的行和列中分别寻找是否存在target。