钢铁是怎样炼成的读后感200字对角线遍历输出矩阵元素
一、问题描述
对角线遍历输出矩阵元素是指按照从左上角到右下角的顺序依次输出矩阵中的元素。例如,对于如下矩阵:
1 2 3
4 5 6
7 8 9语言英文怎么写
按照对角线遍历顺序输出的结果为:1,2,4,7,5,3,6,8,9。
二、解题思路
对于一个n行m列的矩阵,我们可以将其分为两种情况进行考虑:
1. n=m(即为正方形矩阵)
这种情况下,我们可以从左上角开始,依次按照右上方、左下方、右上方、……的顺序输出每个元素。具体实现时,我们可以使用两个指针i和j来记录当前位置,并使用一个布尔变量flag来表示当前是向右上方还是向左下方遍历。当flag为true时,i--,j++;当flag为fal时,i++,j--。需要注意的是,在遇到边界时需要调整指针位置和flag状态。
2. n≠m(即为长方形或宽方形矩阵)
这种情况下,我们需要先将矩阵转化为正方形矩阵再进行遍历。具体实现时,我们可以新建一个n+m-1行n+m-1列的矩阵,将原矩阵中的元素按照对角线顺序填充到新矩阵中。然后按照上述方法遍历新矩阵即可。
三、代码实现
1. n=m的情况:
```python
手指烫伤起泡怎么办
def diagonal_traver(matrix):
if not matrix:
return []
n = len(matrix)
res = []
i, j = 0, 0
flag = True
while i < n and j < n:
res.append(matrix[i][j])
if flag:
if j == n - 1:
i += 1
flag = Fal
elif i == 0:
j += 1
flag = Fal
el:
i -= 1欺凌近义词
j += 1
希望你能幸福 el:
if i == n - 1:
j += 1
flag = True
elif j == 0:
i += 1
flag = True
el:
i += 1
j -= 1
return res
matrix = [[1,2,3],[4,5,6],[7,8,9]]
print(diagonal_traver(matrix)) # [1,2,4,7,5,3,6,8,9]
```
2. n≠m的情况:
```python
def diagonal_traver(matrix):
if not matrix:
return []蹑手蹑脚怎么造句
n,m=len(matrix),len(matrix[0])#获取原矩阵的行数和列数测试的英文
#创建新矩阵并填充元素,注意填充顺序要与对角线遍历顺序一致
new_matrix=[[0]*(n+m-1) for _ in range(n+m-1)]
for i in range(n):
for j in range(m):
new_matrix[i+j][j]=matrix[i][j]八下历史知识点
res=[]
i,j=0,0
flag=True
while i<n+m-1 and j<n+m-1:
res.append(new_matrix[i][j])