• 54. 螺旋矩阵


    可以模拟螺旋矩阵的路径。初始位置是矩阵的左上角,初始方向是向右,当路径超出界限或者进入之前访问过的位置时,顺时针旋转,进入下一个方向。

    判断路径是否进入之前访问过的位置需要使用一个与输入矩阵大小相同的辅助矩阵 visited,其中的每个元素表示该位置是否被访问过。当一个元素被访问时,将 visited 中的对应位置的元素设为已访问。

    如何判断路径是否结束?由于矩阵中的每个元素都被访问一次,因此路径的长度即为矩阵中的元素数量,当路径的长度达到矩阵中的元素数量时即为完整路径,将该路径返回。

    class Solution {
    public:
        int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
        int n, m;
        
        bool check(int x, int y) {
            return x >= 0 && x < n && y >= 0 && y < m;
        }
        
        vector<int> spiralOrder(vector<vector<int>>& matrix) {
            int n = matrix.size();
            if (!n) return {};
            int m = matrix[0].size();
            this->n = n, this->m = m;
    
            vector<int> res(n * m);
            vector<vector<bool>> vis(n, vector<bool>(m));
            for (int i = 0, x = 0, y = 0, dir = 1; i < n * m; i++) {
                res[i] = matrix[x][y];
                vis[x][y] = true;
                int a = x + dx[dir], b = y + dy[dir];
                if (!check(a, b) || vis[a][b]) {
                    dir = (dir + 1) % 4;
                    a = x + dx[dir], b = y + dy[dir];
                }
                x = a, y = b;
            }
    
            return res;
        }
    };
    
  • 相关阅读:
    (转)基于MapWinGis开发探索(一)
    ArcGIS Server REST API开发相关新词汇
    自写地图全图功能
    向远程目录写数据
    GetUpperBound方法
    监控安装教程
    办公室局域网打印机共享设置
    电脑Bois中usb模式启动热键
    SQL SERVER 2005无法远程连接
    用网线直接把打印机连入网络的问题
  • 原文地址:https://www.cnblogs.com/fxh0707/p/15049019.html
Copyright © 2020-2023  润新知