package SwordOffer;
/**
* @Description: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
* @Param:
* @return:
* @Author: lvhong
* @Date:
* @E-mail lvhong282@163.com
*/
public class lab29easy {
//辅助数组
// public int[] spiralOrder(int[][] matrix) {
// if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
// return new int[0];
// }
// int width=matrix[0].length;
// int high=matrix.length;
// boolean [][] sup = new boolean[high][width];
// int length=width*high;
// int [] out =new int[length];
// int i=0,row=0,col=0;
// int [][] direction = {{0,1},{1,0},{0,-1},{-1,0}};
// int number=0;
// while(i<length){
// out[i]=matrix[row][col];
// sup[row][col]=true;
// int nextRow=row+direction[number][0];
// int nextCol=col+direction[number][1];
// if(nextRow<0||nextRow>=high||nextCol<0||nextCol>=width||sup[nextRow][nextCol]){
// number=(number+1)%4;
// }
// row+=direction[number][0];
// col+=direction[number][1];
// i++;
// }
// return out;
// }
// //加边界
// 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;
// }
// //按层模拟
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;
}
}