每次都是转圈打印,所以记二维数组的左上和右下坐标,一圈圈打印即可
public static ArrayList<Integer> printMatrix(int [][] matrix) {
if(matrix==null||matrix.length==0)return null;
ArrayList<Integer> res = new ArrayList<>();
return printCircle(res,matrix,0,0,matrix.length-1,matrix[0].length-1);
}
private static ArrayList<Integer> printCircle(ArrayList<Integer> res,int[][] arr,int row1,int col1,int row2,int col2){
int curR= row1;
int curC = col1;
//递归结束条件
if(col1-col2>0||row1-row2>0)
return res;
//如果只有一行
if(row1==row2){
for (int i = col1; i <=col2 ; i++) {
res.add(arr[row2][i]);
}
return res;
}else if (col1==col2){
for (int i = row1; i <=row2 ; i++) {
res.add(arr[i][col1]);
}
return res;
}
while (curC<col2) {
res.add(arr[curR][curC++]);
}
while(curR<row2){
res.add(arr[curR++][curC]);
}
while (curC>col1){
res.add(arr[curR][curC--]);
}
while (curR>row1){
res.add(arr[curR--][curC]);
}
return printCircle(res,arr,++row1,++col1,--row2,--col2);
}
京公网安备 11010502036488号