美文网首页
顺时针打印矩阵问题

顺时针打印矩阵问题

作者: 多喝热开水 | 来源:发表于2020-05-27 10:49 被阅读0次

在刷leetcode的时候又遇到了个问题:

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

示例 1:

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

示例 2:

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

限制:

0 <= matrix.length <= 100
0 <= matrix[i].length <= 100

想了半天,貌似也没有什么规律,话说这道题真的是道简单的题目么,感觉有点打脸啊


image.png image.png

按照我的想法,其实就是按顺序取值,一共有四种操作, 从上到下操作,取 list[0] 的所有顺序值即1234,然后 取右值,即取所有剩下数组的 最后一个值。再按顺序取下值,最后倒序取左值。
那么结论来了,我只需要写这四种操作,然后迭代调用就可以完成这个边界值问题了。
由于OC 比较麻烦,讲道理的话还是JS比较简洁,还是按照JS来解决这个问题

//定义四个方向值,
var Direction = {
    right : 0,   //向右
    bottom : 1, //向下
    left : 2,   //向左
    up : 3,     //向上
};
var spiralOrder = function(matrix) {
    let resultList = [];
    var result = iteration(resultList,matrix,Direction.right);
    console.log(result);
    return result;
};
var iteration = function(resultList,matrix,direction) {
    if (!matrix) {
        return resultList;
    }
    // 只有最后一个时,直接将其抛出
    if (matrix.length == 0) {
        return resultList;
    }
    let tempList = [];
    switch (direction) {
        case(Direction.right) :{
            tempList = matrix.shift();
            resultList = resultList.concat(tempList);
        }
        break;
        case(Direction.bottom) :{
            for (var i = 0; i < matrix.length; i++) {
                var lastValue =  matrix[i].pop();
                // 解决数组为空的问题
                if (typeof(lastValue) == "undefined") {
                    return resultList;
                }
                resultList.push(lastValue);
            }
        }
        break;
        case(Direction.left) :{
            tempList = matrix.pop();
            resultList = resultList.concat(tempList.reverse());
        }
        break;
        case(Direction.up) :{
            for (var i = matrix.length - 1; i >= 0; i--) {
                var firstValue = matrix[i][0];
                // 解决数组为空的问题
                if (typeof(firstValue) == "undefined") {
                    return resultList;
                }

                matrix[i].shift();
                resultList.push(firstValue);
            }
        }
        break;
    }
    // 获取下一个方向 
    direction = (direction+1)%4;
    return iteration(resultList,matrix,direction);
};

提交代码,执行效果如下:


image.png

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/filter-restaurants-by-vegan-friendly-price-and-distance

相关文章

  • 【不熟练】知识迁移能力-顺时针打印矩阵

    顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: ...

  • 《剑指offer》— JavaScript(19)顺时针打印矩阵

    顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: ...

  • 顺时针打印矩阵问题

    在刷leetcode的时候又遇到了个问题: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 ...

  • 剑指offer——顺时针打印矩阵

    剑指offer——顺时针打印矩阵 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,...

  • 矩阵

    题一:顺时针转圈打印矩阵 题二:“之“字形打印矩阵"之"字形打印矩阵两个指针:(sr,sc)先从第一行往右移动,到...

  • 《剑指offer》(十九)-顺时针打印矩阵(java)

    顺时针打印矩阵 考点:数组 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入...

  • 顺时针打印矩阵

    题目:顺时针打印矩阵(算法课第四课) 对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩...

  • 顺时针打印矩阵

    题目来源:牛客网--顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,...

  • 剑指Offer--顺时针打印矩阵

    顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X ...

  • JZ-019-顺时针打印矩阵

    顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X ...

网友评论

      本文标题:顺时针打印矩阵问题

      本文链接:https://www.haomeiwen.com/subject/gloiahtx.html