题解 | #螺旋矩阵#
螺旋矩阵
https://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31
public ArrayList<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> list = new ArrayList<>();
//判断空
if(matrix.length==0) return list;
//设定四个边界,上下左右边界
int top=0,bottom=matrix.length-1;
int left=0,right=matrix[0].length-1;
//四个循环搞定一圈,外层再次循环用来循环所有, //直到边界重合
while(left<=right && top<= bottom){
//上边界的从左到右
for (int i = left; i <=right ; i++) {
list.add(matrix[top][i]);
}
//上边界相应就往下一行,要判断上下边界是否相遇相交。
top++;
if(top>bottom) break;
//右边界的从上到下
for (int i = top; i <=bottom ; i++) {
list.add(matrix[i][right]);
}
//上边界相应就往下一行,要判断上下边界是否相遇相交。
right--;
if(left>right) break;
//下边界的从右到左
for (int i = right; i >=left ; i--) {
list.add(matrix[bottom][i]);
}
//下边界相应就往上一行,要判断上下边界是否相遇相交。
bottom--;
if(top>bottom) break;
//左边界的从下到上
for (int i = bottom; i >=top ; i--) {
list.add(matrix[i][left]);
}
//左边界就相应往右一列,要判断左右边界是否相遇相交。
left++;
if(left>right)break;
}
return list;
}