解题思路
这是一个矩阵"之"字形打印的问题。需要按照从左到右、从右到左交替的顺序打印每一行。
关键点:
- 根据行号判断打印方向
- 偶数行从左到右打印
- 奇数行从右到左打印
- 需要记录当前打印位置
算法步骤:
- 创建结果数组
- 遍历矩阵的每一行
- 根据行号决定打印方向
- 按顺序存储打印结果
代码
class Printer {
public:
vector<int> printMatrix(vector<vector<int> >& mat, int n, int m) {
vector<int> result(n * m);
int index = 0;
// 遍历每一行
for (int i = 0; i < n; i++) {
// 偶数行从左到右
if (i % 2 == 0) {
for (int j = 0; j < m; j++) {
result[index++] = mat[i][j];
}
}
// 奇数行从右到左
else {
for (int j = m - 1; j >= 0; j--) {
result[index++] = mat[i][j];
}
}
}
return result;
}
};
import java.util.*;
public class Printer {
public int[] printMatrix(int[][] mat, int n, int m) {
int[] result = new int[n * m];
int index = 0;
// 遍历每一行
for (int i = 0; i < n; i++) {
// 偶数行从左到右
if (i % 2 == 0) {
for (int j = 0; j < m; j++) {
result[index++] = mat[i][j];
}
}
// 奇数行从右到左
else {
for (int j = m - 1; j >= 0; j--) {
result[index++] = mat[i][j];
}
}
}
return result;
}
}
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Printer:
def printMatrix(self, mat, n, m):
result = []
# 遍历每一行
for i in range(n):
# 偶数行从左到右
if i % 2 == 0:
for j in range(m):
result.append(mat[i][j])
# 奇数行从右到左
else:
for j in range(m-1, -1, -1):
result.append(mat[i][j])
return result
算法及复杂度
- 算法:模拟
- 时间复杂度:,需要遍历整个矩阵
- 空间复杂度:,需要存储结果数组