59、螺旋矩阵2 :还是使用螺旋矩阵一的思路,使用上下左右边界,循环完之后改变边界值,由于这题的矩阵中的数是明确的,采用count计数作为跳出循环的条件
需要学习创建新二维数组的方式:matrix=[[0 for _ in range(n)列] for _ in range(n)行]
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
left=0
right=n-1
up=0
down=n-1
matrix=[[0 for _ in range(n)] for _ in range(n)]
i=0
j=0
count=1
while(count<n*n+1):
for j in range(left,right+1):
matrix[up][j]=count
count+=1
up+=1
for i in range(up,down+1):
matrix[i][right]=count
count+=1
right-=1
for j in range(right,left-1,-1):
matrix[down][j]=count
count+=1
down-=1
for i in range(down,up-1,-1):
matrix[i][j]=count
count+=1
left+=1
return matrix
289、生命游戏 法一:使用新数组用于记录细胞的生死,在创建时考虑到边界的细胞的处理问题创建了M+2*N+2的数组,根据题意边界用零填充不影响判断。
接下来就是根据逻辑写判断条件,我分为一开始活细胞\死细胞两类。需要注意的是:
newboard=[[0 for _ in range(n+2)] for _ in range(m+2)]
还有根据newboard判断时需要注意到board的下标ij都需要加一才能对应上
class Solution:
def gameOfLife(self, board: List[List[int]]) -> None:
"""
Do not return anything, modify board in-place instead.
"""
m,n=len(board),len(board[0])
num=m*n
flag=[0]*num
newboard=[[0 for _ in range(n+2)] for _ in range(m+2)]
for i in range(1,m+1):
for j in range(1,n+1):
newboard[i][j]=board[i-1][j-1]
def aflag(newboard:List[List[int]],i,j)->bool:
if newboard[i][j]==1:
count=-1
for x in range(-1,2):
for y in range(-1,2):
if newboard[i+x][j+y]==1:
count+=1
if count==2 or count==3:
return 1
else:
return 0
else:
count=0
for x in range(-1,2):
for y in range(-1,2):
if newboard[i+x][j+y]==1:
count+=1
if count==3:
return 1
else:
return 0
for i in range(0,m):
for j in range(0,n):
if aflag(newboard,i+1,j+1):
board[i][j]=1
else :
board[i][j]=0
return board
方法二 分析题目,细胞前后各有0,1两种状态,则最多有00,01,10,11两种状态