【LeetCode热题100(19/100)】螺旋矩阵

题目地址:链接
题目描述: 给你一个 mn 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例输出:

示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

dfs

思路: 使用dfs模拟一遍即可
js中创建二维数组,使用 Array.from({length: n}, () => Array(m).fill(0))

var spiralOrder = function(matrix) {
    dx = [0, 1, 0, -1];
    dy = [1, 0, -1, 0];
    function dfs(x, y, dir) {
        if(res.length >= n * m) return;
        for(let i = x, j = y; i < n && y < m;) {
            if(isRead[i][j] == 0) {
                isRead[i][j] = 1;
                res.push(matrix[i][j]);
                [newi, newj] = [dx[dir] + i, dy[dir] + j];
                if(newi < 0 || newi >= n || newj < 0 || newj >= m || isRead[newi][newj] != 0) {
                    let d = (dir + 1) % 4;
                    dfs(dx[d] + i, dy[d] + j, d);
                    return;
                }
                [i, j] = [dx[dir] + i, dy[dir] + j];
            } else {
                let d = (dir + 1) % 4;
                dfs(dx[d] + i, dy[d] + j, d);
                return;
            }

        }
    }
    let res = [];
    let [n, m] = [matrix.length, matrix[0].length];
    const isRead = Array.from({length: n}, () => Array(m).fill(0));
    dfs(0, 0, 0);
    return res;
};
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值