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

顺时针打印矩阵问题

作者: 多喝热开水 | 来源:发表于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

    相关文章

      网友评论

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

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