54.螺旋矩阵(js)

发布时间:2024年01月21日

题目:

给你一个?m?行?n?列的矩阵?matrix?,请按照?顺时针螺旋顺序?,返回矩阵中的所有元素。

示例 1:

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

思路:

先实现方向控制,得到1->2->3->6->9->8->7->4->1,在此基础上加上一个变量cycle记录转了几圈,边界判断时加上这个变量就OK了

代码:

/**
 * @param {number[][]} matrix
 * @return {number[]}
 */
var spiralOrder = function (matrix) {
    let x = 0, y = 0 // 当前坐标
    let way = 'right' // 当前走的方向
    let num = matrix.length * matrix[0].length // 要遍历的元素总数量
    let cycle = 0 // 已经转了几圈
    let res = [] // 输出结果
    for (let i = 0; i < num; i++) {
        res.push(matrix[y][x])
        if (way === 'right') {
            if (x + 1 < (matrix[0].length - cycle)) { // 下一步还能往右
                x++
            } else { // 下一步不能往右,那就往下
                way = 'down'
            }
        }
        if (way === 'down') {
            if (y + 1 < (matrix.length - cycle)) { // 下一步还能往下
                y++
            } else { // 下一步不能往下,那就往左
                way = 'left'
            }
        }
        if (way === 'left') {
            if (x - 1 >= (0 + cycle)) { // 下一步还能往左
                x--
            } else { // 下一步不能往左,那就往上
                way = 'up'
                cycle++ // 圈数加一
            }
        }
        if (way === 'up') {
            if (y - 1 >= (0 + cycle)) { // 下一步还能往上
                y--
            } else { // 下一步不能往上,那就往右
                way = 'right'
                x++
            }
        }
    }
    return res
};

文章来源:https://blog.csdn.net/qq_43119912/article/details/135728882
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。