解题思路

这是一个矩阵"之"字形打印的问题。需要按照从左到右、从右到左交替的顺序打印每一行。

关键点:

  1. 根据行号判断打印方向
  2. 偶数行从左到右打印
  3. 奇数行从右到左打印
  4. 需要记录当前打印位置

算法步骤:

  1. 创建结果数组
  2. 遍历矩阵的每一行
  3. 根据行号决定打印方向
  4. 按顺序存储打印结果

代码

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


算法及复杂度

  • 算法:模拟
  • 时间复杂度:,需要遍历整个矩阵
  • 空间复杂度:,需要存储结果数组