题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
样例
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
算法1
(递归) $O(n)$
从外圈到内圈的顺序依次打印。
为了使参数简洁,声明了一系列成员变量。
Java 代码
class Solution {
int[][] _matrix;
int height;
int width;
int[] result;
int index;
public int[] printMatrix(int[][] matrix) {
if(matrix==null || matrix.length==0 || matrix[0].length==0){
return new int[0];
}
_matrix=matrix;
height=matrix.length;
width=matrix[0].length;
result=new int[height*width];
index=0;
dfs(0);
return result;
}
public void dfs(int n){
if((height-2*n)<=0 || (width-2*n)<=0){
return;
}
//上排
for(int i=n;i<width-n;i++){
result[index++]=_matrix[n][i];
}
//右排
for(int i=1+n;i<height-n;i++){
result[index++]=_matrix[i][width-1-n];
}
//下排
//下排要大于上排
if(height-1-n>n){
for(int i=width-1-1-n;i>=n;i--){
result[index++]=_matrix[height-1-n][i];
}
}
//左排
//左排要小于右排
if(n<width-1-n){
for(int i=height-1-1-n;i>n;i--){
result[index++]=_matrix[i][n];
}
}
dfs(++n);
}
}