解题思路
这是一个矩阵"之"字形打印的问题。需要按照从左到右、从右到左交替的顺序打印每一行。
关键点:
- 根据行号判断打印方向
 - 偶数行从左到右打印
 - 奇数行从右到左打印
 - 需要记录当前打印位置
 
算法步骤:
- 创建结果数组
 - 遍历矩阵的每一行
 - 根据行号决定打印方向
 - 按顺序存储打印结果
 
代码
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
算法及复杂度
- 算法:模拟
 - 时间复杂度:
,需要遍历整个矩阵
 - 空间复杂度:
,需要存储结果数组
 

京公网安备 11010502036488号