北京外贸网站制作公司,aso优化排名违法吗,百度下载安装免费,网页设计工资怎么样一、思路
这个题目主要有两个问题#xff0c;一是什么时候切换方向#xff0c;二是如何切换方向
问题一#xff1a;此步移动完后#xff0c;判断下一个元素#xff0c;如果大于等于边界值#xff08;从0开始#xff09;或者小于边界值时或者访问数组为真时
问题二一是什么时候切换方向二是如何切换方向
问题一此步移动完后判断下一个元素如果大于等于边界值从0开始或者小于边界值时或者访问数组为真时
问题二创建一个方向数组通过行数和列数的加减来实现切换方向然后通过%4来循环访问这个数组
二、记忆
1.二维矩阵的使用长度声明和直接用数值定义
int[][] check new int[rows][columns];
int[][] nextdirections {{0,1},{1,0},{0,-1},{-1,0}};
2.方向数组来确定移动方向的思路
3.预判定的思路
int nextrow row nextdirections[nextdirection][0];
int nextcolumn column nextdirections[nextdirection][1];
if(nextcolumncolumns || nextcolumn0 || nextrow0 || nextrowrows || check[nextrow][nextcolumn] 1 ){nextdirection (nextdirection1)%4;
}
三、代码
public ListInteger spiralOrder(int[][] matrix){ArrayListInteger order new ArrayList();//异常条件处理if(matrix null || matrix.length 0 || matrix[0].length 0) return order;int rows matrix.length,columns matrix[0].length;int[][] check new int[rows][columns];int[][] nextdirections {{0,1},{1,0},{0,-1},{-1,0}};int total rows*columns;int row 0,column 0;int nextdirection 0;for(int i 0;itotal;i){order.add(matrix[row][column]);check[row][column] 1;//预判确定移动方向int nextrow row nextdirections[nextdirection][0];int nextcolumn column nextdirections[nextdirection][1];if(nextcolumncolumns || nextcolumn0 || nextrow0 || nextrowrows || check[nextrow][nextcolumn] 1 ){nextdirection (nextdirection1)%4;}//移动row nextdirections[nextdirection][0];column nextdirections[nextdirection][1];}return order;}