LeetCode如何顺时针打印矩阵

这篇文章主要为大家展示了“LeetCode如何顺时针打印矩阵”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“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

问题分析

逆时针打印,也就是下面这张图这样

LeetCode如何顺时针打印矩阵

代码没什么难度,主要是在打印的时候做一些边界的判断,看下代码

 1public int[] spiralOrder(int[][] matrix) { 2    if (matrix == null || matrix.length == 0) 3        return new int[0]; 4    int m = matrix.length, n = matrix[0].length; 5    int[] res = new int[m * n]; 6    int up = 0, down = m - 1, left = 0, right = n - 1, index = 0; 7    while (true) { 8        // 上面行,从左往右打印(行不变,改变列的下标) 9        for (int col = left; col <= right; col++)10            res[index++] = matrix[up][col];11        if (++up > down)12            break;1314        // 右边列,从上往下打印(列不变,改变行的下标)15        for (int row = up; row <= down; row++)16            res[index++] = matrix[row][right];17        if (--right < left)18            break;1920        // 下面行,从右往左打印(行不变,改变列的下标)21        for (int col = right; col >= left; col--)22            res[index++] = matrix[down][col];23        if (--down < up)24            break;2526        // 左边列,从下往上打印(列不变,改变行的下标)27        for (int row = down; row >= up; row--)28            res[index++] = matrix[row][left];29        if (++left > right)30            break;31    }32    return res;33}

再来看一种方式,就是每次打印的时候上面一行和下面一行都是完整打印,左边一列和右边一列打印的值是夹在上下两行之间的,打印一圈之后,再缩小圈的范围。和上面有一点点区别,但原理还是没变。

LeetCode如何顺时针打印矩阵

 1public int[] spiralOrder(int[][] matrix) { 2    if (matrix == null || matrix.length == 0) 3        return new int[0]; 4    int n = matrix.length, m = matrix[0].length; 5    int[] res = new int[m * n]; 6    int up = 0, down = n - 1; 7    int left = 0, right = m - 1; 8    int total = m * n; 9    int index = 0;10    while (index < total) {11        //上面,从左往右打印12        for (int j = left; j <= right && index < total; j++)13            res[index++] = matrix[up][j];14        //右边,从上往下打印(注意这里i的取值范围)15        for (int i = up + 1; i <= down - 1 && index < total; i++)16            res[index++] = matrix[i][right];17        //下边,从右往左打印18        for (int j = right; j >= left && index < total; j--)19            res[index++] = matrix[down][j];20        //左边,从下往上打印(注意这里i的取值范围)21        for (int i = down - 1; i >= up + 1 && index < total; i--)22            res[index++] = matrix[i][left];23        left++;24        right--;25        up++;26        down--;27    }28    return res;29}

以上是“LeetCode如何顺时针打印矩阵”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

原创文章,作者:306829225,如若转载,请注明出处:https://blog.ytso.com/223547.html

(0)
上一篇 2022年1月7日
下一篇 2022年1月7日

相关推荐

发表回复

登录后才能评论