网站建设名词解释,门户网站制作的公司,服务器创建多个网站吗,中国有多少网站有多少域名54. 螺旋矩阵 - 力扣#xff08;LeetCode#xff09; 一、题目
给你一个 m 行 n 列的矩阵 matrix #xff0c;请按照 顺时针螺旋顺序 #xff0c;返回矩阵中的所有元素。
示例 1#xff1a; 输入#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]]
输出#xff1a;[1,2,3,… 54. 螺旋矩阵 - 力扣LeetCode 一、题目
给你一个 m 行 n 列的矩阵 matrix 请按照 顺时针螺旋顺序 返回矩阵中的所有元素。
示例 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]提示
m matrix.lengthn matrix[i].length1 m, n 10-100 matrix[i][j] 100
二、代码
class Solution {public ListInteger spiralOrder(int[][] matrix) {// 表示每一层左上角和右下角的坐标a, b和c, dint a 0;int b 0;int c matrix.length - 1;int d matrix[0].length - 1;ListInteger ans new ArrayList();// 从外层依次向内层移动所以左上角和右下角的下标需要同步加1和减1// 因为这里并不一定是正方形矩阵所以条件要限定a c b d因为有可能长 宽也有可能宽 长while (a c b d) {printSpiralOrder(matrix, a, b, c--, d--, ans);}return ans;}public void printSpiralOrder(int[][] m, int a, int b, int c, int d, ListInteger ans) {// 这道题也是用一个具体的例子来根据输出的下标变化来找规律的普遍情况下就就是写四个并列的循环就可以了但是需要讨论一下最后一层凑不出来一个环的情况// 最后一层只剩下一行了if (a c) {for (int i b; i d; i) {ans.add(m[a][i]);}// 最后一层只剩下一列了 } else if (b d) {for (int i a; i c; i) {ans.add(m[i][b]);}// 普通的情况 } else {// 四个并列的循环把一个边一起输出for (int i b; i d; i) {ans.add(m[a][i]);}for (int i a 1; i c; i) {ans.add(m[i][d]);}for (int i d - 1; i b; i--) {ans.add(m[c][i]);}for (int i c - 1; i a 1; i--) {ans.add(m[i][b]);}}}
}
三、解题思路
这道题也是用一个具体的例子来根据输出的下标变化来找规律的普遍情况下就就是写四个并列的循环就可以了但是需要讨论一下最后一层凑不出来一个环的情况。
分圈结构
先想在这一个框里怎么实现打印。结果你会发现下一个框的第一个正好跟上一个框的最后一个接上了。
也就是说你只用解决在一个框里这样打印就行了。下一个框再这么打印它每一个第一个都会跟前一个最后一个接上。