这篇文章主要为大家展示了“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
问题分析
逆时针打印,也就是下面这张图这样
代码没什么难度,主要是在打印的时候做一些边界的判断,看下代码
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}
再来看一种方式,就是每次打印的时候上面一行和下面一行都是完整打印,左边一列和右边一列打印的值是夹在上下两行之间的,打印一圈之后,再缩小圈的范围。和上面有一点点区别,但原理还是没变。
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