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