二维数组相关题目 力扣 Python
48. 旋转图像
解题思路:
解法 1. 主对角线反转加竖直反转。
解法 2. 水平反转加主对角线反转。
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
n = len(matrix)
for i in range(n // 2):
for j in range(n):
matrix[i][j], matrix[n-i-1][j] = matrix[n-i-1][j], matrix[i][j]
#沿对角线反转
for i in range(n):
for j in range(i):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
73. 矩阵置零
解题思路:
题目要求常量空间且原地解决。
利用矩阵的第一行和第一列来标记有 0 的行与列。
- 设置两个变量来记录每行或每列是否应被置 0。
- 先遍历矩阵的第一行和第一列。
- 再遍历除第一行和第一列的矩阵。
- 先置 0 除第一行和第一列的矩阵。
- 再置 0 第一行和第一列的矩阵。
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
m = len(matrix)
n = len(matrix[0])
flag_col0 = False
flag_row0 = False
#遍历第一行
for i in range(m):
if matrix[i][0] == 0:
flag_col0 = True
break
#遍历第一列
for j in range(n):
if matrix[0][j] ==0:
flag_row0 = True
break
#用第一行与第一列,记录其余的矩阵有 0 的行与列
for i in range(1, m):
for j in range(1, n):
if matrix[i