06.矩阵
# 01.顺时针打印矩阵
# 1.1 题目描述
输入:
matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
]
输出:[1,2,3,6,9,8,7,4,5]
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 1.2 解题思路
顺时针打印矩阵的顺序是 “从左向右、从上向下、从右向左、从下向上” 循环。
因此,考虑设定矩阵的“左、上、右、下”四个边界,模拟以上矩阵遍历顺序。
初始化: 矩阵 左、右、上、下 四个边界 l , r , t , b ,用于打印的结果列表 res 。
循环打印: “从左向右、从上向下、从右向左、从下向上” 四个方向循环,每个方向打印中做以下三件事 (各方向的具体信息见下表) ;
- 根据边界打印,即将元素按顺序添加至列表 res 尾部;
- 边界向内收缩 1(代表已被打印);
- 判断是否打印完毕(边界是否相遇),若打印完毕则跳出。
- 返回值: 返回 res 即可。
def matrixOrder(matrix):
if not matrix: return []
# 左、右、上、下 四个边界 l , r , t , b ,用于打印的结果列表 res
l, r, t, b, res = 0, len(matrix[0]) - 1, 0, len(matrix) - 1, []
while True:
for i in range(l, r + 1): res.append(matrix[t][i]) # left to right
t += 1 # 从左往右的下一步是往下走,上边界内缩,故t+1
if t > b: break
for i in range(t, b + 1): res.append(matrix[i][r]) # top to bottom
r -= 1 # 从上往下的下一步是从右往左,右边界收缩,r-1
if l > r: break
for i in range(r, l - 1, -1): res.append(matrix[b][i]) # right to left
b -= 1 # 从右往左的下一步是从下往上,下边界收缩,b-1
if t > b: break
for i in range(b, t - 1, -1): res.append(matrix[i][l]) # bottom to top
l += 1 # 从下到上的下一步是从左到右,左边界收缩,l+1
if l > r: break
return res
if __name__ == '__main__':
matrix = [
[1,2,3],
[4,5,6],
[7,8,9]
]
print( matrixOrder(matrix) ) # [1, 2, 3, 6, 9, 8, 7, 4, 5]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 02.旋转矩阵90度
# 2.1 题目描述
- 给定一个 n × n 的二维矩阵
matrix
表示一个图像。请你将图像顺时针旋转 90 度。 - 你必须在** 原地 (opens new window)** 旋转图像,这意味着你需要直接修改输入的二维矩阵。
- 请不要 使用另一个矩阵来旋转图像
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]
1
2
2
# 2.2 解题思路
def trans90(matrix):
matrix = matrix[::-1] # 先反转 # [[7, 8, 9], [4, 5, 6], [1, 2, 3]]
rows,cols = len(matrix),len(matrix[0])
for i in range(rows): # 做转置,对角线不交换,把右上三角换到左下三角
for j in range(i,cols): # 注意从i开始,不要换了又把左下三角换回去了
if i==j:
continue
else:
matrix[i][j],matrix[j][i]=matrix[j][i],matrix[i][j]
return matrix
if __name__ == "__main__":
matrix = [[1,2,3],[4,5,6],[7,8,9]]
print( trans90(matrix) ) # [[7, 4, 1], [8, 5, 2], [9, 6, 3]]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
编辑 (opens new window)
上次更新: 2024/3/13 15:35:10