通俗易懂的螺旋打印和之字型遍历

版权声明:欢迎转载哦:http://blog.csdn.net/mikeoperfect(根据全文检索搜索引擎的稀疏矩阵排名算法,这样可以增加排名量哦哈哈哈) https://blog.csdn.net/Mikeoperfect/article/details/81952797

最近好累,注意休息,尤其是这种最注重效率的时候,今天谈一谈这种二维数组,没做过会觉得很难,做完了不去复习也会觉得很难,菜鸟和大神之间的差距讲道理只是入门时间长短问题。。。

这里写图片描述

直接看代码吧,感觉讲的比我更清楚,逻辑非常清晰,代码非常易懂,总之就是很棒

public List<Integer> spiralOrder(int[][]matrix){
        ArrayList<Integer>res=new ArrayList<>();
        if(matrix.length==0)
            return res;
        int startRow=0,endRow=matrix.length-1;
        int startCol=0,endCol=matrix[0].length-1;
        while (startCol<=endCol&&startRow<=endRow){
            for(int i=startCol;i<=endCol;i++)
                res.add(matrix[startRow][i]);
            for(int i=startRow+1;i<=endRow;i++)
                res.add(matrix[i][endCol]);
            if(startRow!=endRow)
                for(int i=endCol-1;i>=startCol;i--)
                    res.add(matrix[endRow][i]);
            if(startCol!=endCol)
                for(int i=endRow-1;i>startRow;i--)
                    res.add(matrix[i][startCol]);
            startCol++;
            startRow++;
            endCol--;
            endRow--;
        }
        return res;
    }

这里写图片描述

public class Solution {
    public int[] printZMatrix(int[][] matrix) {
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return null;
        int count = matrix.length * matrix[0].length;
        int[] array = new int[count];
        int r = 0, c = 0;
        array[0] = matrix[0][0];
        for (int i = 1; i < count; ) {
            //斜上走到顶
            while(i < count && r - 1 >= 0 && c + 1 < matrix[0].length) {
                array[i++] = matrix[--r][++c];
            }
            //横右走一步,不可横右走时竖下走一步
            if (i < count && c + 1 < matrix[0].length) {
                array[i++] = matrix[r][++c];
            } else if (i < count && r + 1 < matrix.length) {
                array[i++] = matrix[++r][c];
            }
            //斜下走到底
            while(i < count && r + 1 < matrix.length && c - 1 >= 0) {
                array[i++] = matrix[++r][--c];
            }
            //竖下走一步,不可竖下走时横右走一步
            if (i < count && r + 1 < matrix.length) {
                array[i++] = matrix[++r][c];
            } else if (i < count && c + 1 < matrix[0].length) {
                array[i++] = matrix[r][++c];
            }
        }
        return array;
    }

}

小结

近期还是得多写写博客,题当然得刷了,毕竟大趋势是这样的

猜你喜欢

转载自blog.csdn.net/Mikeoperfect/article/details/81952797