问题
- 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
解决
//采用宏观调度的方式
//可以看作n层进行操作,每层从左上角、右下角的a、b两点遍历
class Solution {
List<Integer> list=new ArrayList<Integer>();
public List<Integer> spiralOrder(int[][] matrix) {
int row=matrix.length; //每行的长度
int col=matrix[0].length; //每列的长度
int arow=0,acol=0,brow=row-1,bcol=col-1;
while (arow <= brow && acol <= bcol) {
reAllOrder(matrix, arow++, acol++, brow--, bcol--);
}
return list;
}
public List<Integer> reAllOrder(int[][] matrix,int arow,int acol,int brow,int bcol){ //操作二维数组 、a的行和列、b的行和列
if(arow==brow){ //ab同行:从左至右依次输出
for(int i=acol;i<=bcol;i++){
list.add(matrix[arow][i]);
}
}
else if(acol==bcol){ //ab同列:上到下依次输出
for(int j=arow;j<=brow;j++){
list.add(matrix[j][arow]);
}
}else{ //ab不同行、不同列:按序从左到右、从上到下依次输出
int curC = acol;
int curR = arow;
while (curC != bcol) { //上边
list.add(matrix[arow][curC]);
curC++;
}
while (curR != brow) { //右边
list.add(matrix[curR][bcol]);
curR++;
}
while (curC != acol) { //下边
list.add(matrix[brow][curC]);
curC--;
}
while (curR != arow) { //左边
list.add(matrix[curR][acol]);
curR--;
}
}
return list;
}
}
标签:matrix,arow,int,brow,螺旋,矩阵,算法,acol
From: https://www.cnblogs.com/zhangsanM/p/16589942.html