输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字, 例如,如果输入如下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.
定义左上顶点和右下顶点,这样可以确定一个框了,每次顺时针打印这个框,打印完了,向内缩小框直到两个顶点相同或者相错
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> list=new ArrayList<>();
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){
prindEdge(matrix,tR,tC,dR,dC);
tR++;tC++;
dR--;dC--;
}
return list;
}
public void prindEdge(int[][] matrix, int tR,int tC,int dR,int dC){
if (tR==dR&&tC==dC){ //同点
list.add(matrix[tR][tC]);
}
if (tR==dR&&tC!=dC)//同行不同列
{
for(int i=tC;i<=dC;i++){
list.add(matrix[tR][i]);
}
}
if (tC==dC&&tR!=dR)//同列不同行
{
for(int i=tR;i<=dR;i++){
list.add(matrix[i][tC]);
}
}
if (tC!=dC&&tR!=dR){//不同列不同行
// (tR,tC)
//
//
//
// (dR,dC)
int currC=tC;
int currR=tR;
while (currC!=dC) { //打印上边框
list.add(matrix[tR][currC]);
currC++;
}
while (currR!=dR){//打印右边框
list.add(matrix[currR][dC]);
currR++;
}
while (currC!=tC){//打印下边框
list.add(matrix[currR][currC]);
currC--;
}
while (currR!=tR){//打印左边框
list.add(matrix[currR][currC]);
currR--;
}
}
}
}