手机营销型网站制作,电商网站毕业设计论文,怎么把网站列入黑名单,不会编程怎样建设网站【问题描述】[中等]
输入一个矩阵#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1#xff1a;输入#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]]
输出#xff1a;[1,2,3,6,9,8,7,4,5]
示例 2#xff1a;输入#xff1a;matrix [[1,2,3,4],[5,6,7,…【问题描述】[中等]
输入一个矩阵按照从外向里以顺时针的顺序依次打印出每一个数字。示例 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
【解答思路】
1. 模拟 时间复杂度O(NM) 空间复杂度O(NM)
class Solution {public int[] spiralOrder(int[][] matrix) {if (matrix null || matrix.length 0 || matrix[0].length 0) {return new int[0];}int rows matrix.length, columns matrix[0].length;boolean[][] visited new boolean[rows][columns];int total rows * columns;int[] order new int[total];int row 0, column 0;int[][] directions {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};int directionIndex 0;//total二维数组的所有个数for (int i 0; i total; i) {order[i] matrix[row][column];visited[row][column] true;int nextRow row directions[directionIndex][0], nextColumn column directions[directionIndex][1];if (nextRow 0 || nextRow rows || nextColumn 0 || nextColumn columns || visited[nextRow][nextColumn]) {directionIndex (directionIndex 1) % 4;}row directions[directionIndex][0];column directions[directionIndex][1];}return order;}
}
2. 按层模拟圆圆圈圈圆圆
解释一 时间复杂度O(NM) 空间复杂度O(NM)
class Solution {public int[] spiralOrder(int[][] matrix) {if (matrix null || matrix.length 0 || matrix[0].length 0) {return new int[0];}int rows matrix.length, columns matrix[0].length;int[] order new int[rows * columns];int index 0;int left 0, right columns - 1, top 0, bottom rows - 1;while (left right top bottom) {for (int column left; column right; column) {order[index] matrix[top][column];}for (int row top 1; row bottom; row) {order[index] matrix[row][right];}//判断必不可少 if (left right top bottom) {for (int column right - 1; column left; column--) {order[index] matrix[bottom][column];}for (int row bottom; row top; row--) {order[index] matrix[row][left];}}left;right--;top;bottom--;}return order;}
}解释二 时间复杂度O(NM) 空间复杂度O(NM)
class Solution {public int[] spiralOrder(int[][] matrix) {if(matrix.length 0) return new int[0];int l 0, r matrix[0].length - 1, t 0, b matrix.length - 1, x 0;int[] res new int[(r 1) * (b 1)];while(true) {for(int i l; i r; i) res[x] matrix[t][i]; // left to right.if(t b) break;for(int i t; i b; i) res[x] matrix[i][r]; // top to bottom.if(l --r) break;for(int i r; i l; i--) res[x] matrix[b][i]; // right to left.if(t --b) break;for(int i b; i t; i--) res[x] matrix[i][l]; // bottom to top.if(l r) break;}return res;}
}
【总结】
1.i 和 i
在前下自加后运算在后先运算后自加
2.画图有助于理解定点切分
3.细节学习
3.1 while break结合
while(true) { if(条件) break;}3.2 二维矩阵遍历初始化
int rows matrix.length, columns matrix[0].length;boolean[][] visited new boolean[rows][columns];int[][] directions {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};转载链接https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/solution/shun-shi-zhen-da-yin-ju-zhen-by-leetcode-solution/
参考链接https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/solution/mian-shi-ti-29-shun-shi-zhen-da-yin-ju-zhen-she-di/