顺时针打印矩阵

顺时针打印矩阵

http://www.nowcoder.com/questionTerminal/9b4c81a02cd34f76be2659fa0d54342a

参考-中工升达预备毕业生-大佬的C++实现

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        // 走的方向:向右、向下、向左、向上
        int dx[4] = {0,1,0,-1};
        int dy[4] = {1,0,-1,0};
        int n = matrix.size(),m = matrix[0].size();
        vector<int> ret;
        bool vis[n][m];
        for(int i=0;i<n;++i){
            for(int j=0;j<m;++j){
                vis[i][j] = false;
            }
        }
        int x = 0,y = 0,dir = 0;
        while(x>=0 && x<n && y>=0 && y<m && !vis[x][y]){
            ret.push_back(matrix[x][y]);
            vis[x][y] = true;
            // 试着继续向dir的方向走
            while(x+dx[dir]>=0 && x+dx[dir]<n && y+dy[dir]>=0 && y+dy[dir]<m && !vis[x+dx[dir]][y+dy[dir]]){
                x += dx[dir];
                y += dy[dir];
                ret.push_back(matrix[x][y]);
                vis[x][y] = true;
            }
            // 走不动了换方向
            dir = (dir+1)%4;
            x += dx[dir];
            y += dy[dir];
        }
        return ret;
    }
};
全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务