题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
思路:首先将只有一行,只有一列的边界情况列举出来。然后设定左上角的行值startRow和列值startCol,右下角的行值endRow和列值endCo,每次读第一行,最后一列,最后一行,第一列。
代码:
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> result = new ArrayList<Integer>();
if(matrix == null ||matrix.length ==0)
return result;
printMatrixmethod(matrix,0,0,matrix.length - 1,matrix[0].length - 1,result);
return result;
}
public void printMatrixmethod(int [][] matrix, int startRow, int startCol, int endRow, int endCol, ArrayList<Integer> result){
if(startRow < endRow && startCol < endCol){
for(int j = startCol; j <= endCol;j++)
result.add(matrix[startRow][j]);
for(int i = startRow + 1; i <= endRow - 1 ;i++)
result.add(matrix[i][endCol]);
for(int j = endCol;j >= startCol;j--)
result.add(matrix[endRow][j]);
for(int i = endRow - 1; i >= startRow + 1; i--)
result.add(matrix[i][startCol]);
printMatrixmethod(matrix,startRow + 1, startCol + 1,endRow - 1,endCol - 1, result);
}else if(startRow == endRow && startCol < endCol ){
for(int j = startCol; j <= endCol ; j++){
result.add(matrix[startRow][j]);
}
}else if(startRow < endRow && startCol == endCol){
for(int i = startRow; i <= endRow; i++)
result.add(matrix[i][startCol]);
}else if(startRow == endRow && startCol == endCol){
result.add(matrix[startRow][startCol]);
}
else
return;
}
}
l