输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
解题思路:先确定矩阵左上角和右下角两个顶点的坐标。
代码如下:
public class Solution{
ArrayList array =new ArrayList();
public static void main(String[] args) {
int [][] matrix = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
Solution s = new Solution();
System.out.println(s.printMatrix(matrix));
}
public ArrayList<Integer> printMatrix(int [][] matrix) {
int tR = 0;
int tC = 0;
int dR = matrix.length-1;
int dC = matrix[0].length-1;
while(tR <=dR && tC<= dC){
printEdge(matrix,tR++,tC++,dR--,dC--,array);
}
return array;
}
private static void printEdge(int[][] m, int tR, int tC, int dR, int dC,ArrayList array) {
if(tR ==dR){
for(int i=tC;i<=dC;i++){
//System.out.println(m[tR][i]+" ");
array.add(m[tR][i]);
}
}else if(tC == dC){
for(int i=tR;i<=dR;i++){
//System.out.println(m[i][tC]+" ");
array.add(m[i][tC]);
}
}else{
int curC = tC;
int curR = tR;
while(curC != dC){
//System.out.println(m[tR][curC]+" ");
array.add(m[tR][curC]);
curC++;
}
while(curR != dR){
//System.out.println(m[curR][dC]+" ");
array.add(m[curR][dC]);
curR++;
}
while(curC != tC){
//System.out.println(m[dR][curC]);
array.add(m[dR][curC]);
curC--;
}
while(curR != tR){
//System.out.println(m[curR][tC]);
array.add(m[curR][tC]);
curR--;
}
}
}
}