leetcode刷题第9天
1.第一题,爬楼梯问题
这道题是一个简单的动态规划问题,memo[i]=memo[i-1]+memo[i-2]代码如下:
class Solution:
def climbStairs(self, n: int) -> int:
memo=[0]*(n+1)
if n==1:
return 1
if n==2:
return 2
if n>2:
memo[1]=1
memo[2]=2
for i in range(3,n+1):
memo[i]=memo[i-2]+memo[i-1]
return memo[n]
2.矩阵置0
这道题的难点在于只能在原矩阵上进行操作,算法思路如下:
检查并标记第一行和第一列是否有0,设置两个变量firstcolhaszero和firstrowhaszero
使用第一行和第一列来标记其余行是否含有0
接下来,利用第一行和第一列的标0的情况,将矩阵中的数字标0
最后,处理第一行和第一列,如果firstcolhaszero=true则将第一列全部置为0,若firstrowhaszero为true则将第一行全部置为0
代码如下:
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
firstcolhaszero=False
firstrowhaszero=False
#检查第一列是否有0
for i in range(len(matrix)):
if matrix[i][0]==0:
firstcolhaszero=True
#检查第一行是否有0
for i in range(len(matrix[0])):
if matrix[0][i]==0:
firstrowhaszero=True
#使用第一行和第一列来标记其余行列是否含有0
for row in range(1,len(matrix)):
for col in range(1,len(matrix[0])):
if matrix[row][col]==0:
matrix[row][0]=0
matrix[0][col]=0
#接下来使用第一行和第一列的标0情况将matrix中的数字标0
for row in range(1,len(matrix)):
for col in range(1,len(matrix[0])):
if matrix[row][0]==0 or matrix[0][col]==0:
matrix[row][col]=0
#最后处理第一行和第一列
if firstcolhaszero==True:
for i in range(len(matrix)):
matrix[i][0]=0
if firstrowhaszero==True:
for i in range(len(matrix[0])):
matrix[0][i]=0
return matrix