顺时针打印矩阵
2016-08-01 17:38
253 查看
思路:找出矩阵的四个顶点,利用递归从外向内依次遍历,直到遍历到矩阵的最里层,结束递归,代码如下:
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> result = new ArrayList<>();
if(matrix.length==0||matrix[0].length==0||matrix==null) {
return result;
}
int height = matrix[0].length;
int width = matrix.length;
result.addAll(printChildMatrix(0, 0, width-1, height-1, matrix));
return result;
}
public ArrayList<Integer> printChildMatrix(int x1, int y1, int x2, int y2, int[][] matrix) {
ArrayList<Integer> result = new ArrayList<>();
if(x1>x2||y1>y2){
return result;
}
if(x1==x2) {
for(int i=y1;i<=y2;i++) {
result.add(matrix[x1][i]);
}
return result;
}
if(y1==y2) {
for(int i=x1;i<=x2;i++) {
result.add(matrix[i][y2]);
}
return result;
}
for(int i=y1;i<=y2;i++) {
result.add(matrix[x1][i]);
}
for(int i=x1+1;i<x2;i++) {
result.add(matrix[i][y2]);
}
for(int i=y2;i>=y1;i--) {
result.add(matrix[x2][i]);
}
for(int i=x2-1;i>x1;i--) {
result.add(matrix[i][y1]);
}
result.addAll(printChildMatrix(++x1, ++y1, --x2, --y2, matrix));
return result;
}
}
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> result = new ArrayList<>();
if(matrix.length==0||matrix[0].length==0||matrix==null) {
return result;
}
int height = matrix[0].length;
int width = matrix.length;
result.addAll(printChildMatrix(0, 0, width-1, height-1, matrix));
return result;
}
public ArrayList<Integer> printChildMatrix(int x1, int y1, int x2, int y2, int[][] matrix) {
ArrayList<Integer> result = new ArrayList<>();
if(x1>x2||y1>y2){
return result;
}
if(x1==x2) {
for(int i=y1;i<=y2;i++) {
result.add(matrix[x1][i]);
}
return result;
}
if(y1==y2) {
for(int i=x1;i<=x2;i++) {
result.add(matrix[i][y2]);
}
return result;
}
for(int i=y1;i<=y2;i++) {
result.add(matrix[x1][i]);
}
for(int i=x1+1;i<x2;i++) {
result.add(matrix[i][y2]);
}
for(int i=y2;i>=y1;i--) {
result.add(matrix[x2][i]);
}
for(int i=x2-1;i>x1;i--) {
result.add(matrix[i][y1]);
}
result.addAll(printChildMatrix(++x1, ++y1, --x2, --y2, matrix));
return result;
}
}