剑指 Offer 29. 顺时针打印矩阵 + 蛇形矩阵 + 模拟 + 思维题

剑指 Offer 29. 顺时针打印矩阵

Offer_29

题目描述:

题解分析:

  • 题目的初衷是将这道题当做一个简单题处理
  • 这道题一开始想的太复杂了,其实可以参考迷宫广度优先搜索的过程,只不过在选定一个方向遍历时,除非遇到改变方向的情况,否则一直走下去。
  • 需要注意的是:这里的方向二维数组(direction),它里面四个方向需要满足顺时针的顺序。
class Solution {
    public int[] spiralOrder(int[][] matrix) {
        if (matrix == null || matrix.length == 0)
            return  new int[0];;
        int n = matrix.length;
        int m = matrix[0].length;
        int total = n * m;
        int[] result = new int[total];
        boolean [][]isTravel = new boolean[n][m];
        //顺时针的旋转方向
        int [][]direction = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
        int currentDir = 0;
        int currenti=0,currentj=0;
        for(int i=0; i<total; i++){
            result[i] = matrix[currenti][currentj];
            isTravel[currenti][currentj] = true;
            int tempi = currenti + direction[currentDir][0];
            int tempj = currentj + direction[currentDir][1];
            //改变遍历的方向
            if(tempi <0 || tempi >= n || tempj <0 || tempj >=m || isTravel[tempi][tempj]){
                currentDir = (currentDir +1) % 4;
            }
            currenti += direction[currentDir][0];
            currentj += direction[currentDir][1];
        }
        return result;
    }
}
posted @ 2021-01-31 13:27  Garrett_Wale  阅读(77)  评论(0编辑  收藏  举报