ACWING40. 顺时针打印矩阵(剑指offer)

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

样例
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]

输出:[1,2,3,4,8,12,11,10,9,5,6,7]

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        int n = 0,m = 0;
        n = matrix.size();
        if(n != 0) m = matrix[0].size();
        int i = 0,j = -1;
        int vis[n + 1][m + 1];memset(vis,0,sizeof(vis));
        int cnt = n * m;
        vector<int>ans;
        while(cnt) {
            while(j + 1 < m && !vis[i][j + 1]) {
                cnt--;
                vis[i][j + 1] = 1;
                j++;ans.push_back(matrix[i][j]);
            }    
            while(i + 1 < n && !vis[i + 1][j]) {
                cnt--;
                vis[i + 1][j] = 1;
                i++;ans.push_back(matrix[i][j]);
            }
            while(j - 1 >= 0 && !vis[i][j - 1]) {
                cnt--;
                vis[i][j - 1] = 1;
                j--;ans.push_back(matrix[i][j]);
            }
            while(i - 1 >= 0 && !vis[i - 1][j]) {
                cnt--;
                vis[i - 1][j] = 1;
                i--;ans.push_back(matrix[i][j]);
            }
        }
        return ans;
    }
};
发布了844 篇原创文章 · 获赞 28 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/tomjobs/article/details/104936631