列表

详情


OR40. 之字形打印矩阵

描述

对于一个矩阵,请设计一个算法,将元素按“之”字形打印。具体见样例。

给定一个整数矩阵mat,以及他的维数nxm,请返回一个数组,其中元素依次为打印的数字。

测试样例:
[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],4,3
返回:[1,2,3,6,5,4,7,8,9,12,11,10]

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 8ms, 内存消耗: 684KB, 提交时间: 2021-09-22

class Printer {
public:
    vector<int> printMatrix(vector<vector<int> > mat, int n, int m) {
        vector<int> rt;
        for(int i=0;i<n;i++)
        {
            if(i%2==0)
            {
                for(int j=0;j<m;j++)
                    rt.push_back(mat[i][j]);
            }
            else
            {
                for(int j=m-1;j>=0;j--)
                    rt.push_back(mat[i][j]);
            }
        }
        return rt;
    }
};

C++ 解法, 执行用时: 9ms, 内存消耗: 640KB, 提交时间: 2021-12-09

class Printer {
public:
    int dx[4] = {0, 1, 0, 1}, dy[4] = {1, 0 , -1, 0};
    vector<int> printMatrix(vector<vector<int> > mat, int n, int m) {
        int d = 0;
        vector<int> res;
        vector<vector<bool> > st(n , vector<bool> (m, false));
        int x = 0, y = 0;
        for(int i = 0; i < n * m; i ++){
            res.push_back(mat[x][y]);
            st[x][y] = true;
            int a = x + dx[d], b = y + dy[d];
            if(a < 0 || a >= n || b < 0 || b >= m || st[a][b] || d == 1 || d == 3){
                d = (d + 1) % 4;
                a = x + dx[d], b = y + dy[d];
            }
            x = a ,y = b;
        }
        return res;
    }
};

上一题