defrotate(self,matrix: List[List[int]])->List[List[int]]: rlists = list() for j inrange(len(matrix[0])): rlist = list() for i inrange(len(matrix)-1,-1,-1): rlist.append(matrix[i][j]) rlists.append(rlist) return rlists
这个实际上是通过更改读取顺序的方式,重新创建一个矩阵,但是不符合题目不额外使用空间的思想
方法二:
通过矩阵的几何特性来实现
1 2 3 4 5 6 7 8 9
defrotate(self,matrix: List[List[int]]): N = len(matrix) # 对角线互换 for i inrange(N): for j inrange(i): # 这里要仔细理解,因为接下来要进行互换,所以j要随i增大 matrix[i][j],matrix[j][i] = matrix[j][i],matrix[i][j] # 水平互换 for i inrange(N): matrix[i][:] = matrix[i][::-1]
defsetZeroes(self, matrix:List[List[int]]): M=len(matrix) N=len(matrix[0]) line=[0]*M row=[0]*N for i inrange(M): for j inrange(N): if matrix[i][j]==0: line[i] = 1 row[j] = 1 for i inrange(M): for j inrange(N): if line[i]==1or row[j]==1: matrix[i][j]=0
classSolution(object): deffindDiagonalOrder(self, mat:List[List[int]])->List[int]: ans = [] Xsize = len(mat) Ysize = len(mat[0]) tot = Xsize + Ysize - 1 x,y = 0,0 for i inrange(tot): if i%2==1: while y>=0and x<Xsize: ans.append (mat[x][y]) x += 1 y -= 1 if x<Xsize: y += 1 else: y += 2 x -= 1 else: while x>=0and y<Ysize: ans.append (mat[x][y]) x -= 1 y += 1 if y<Ysize: x += 1 else: x += 2 y -= 1 return ans