019顺时针打印矩阵
题目:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
方法:递归法
思路:转换为一个依次打印每一圈的函数,按照顺时针来打印,直到左上角等于右下角就停止
代码:
ArrayList<Integer> res = new ArrayList<>();
public ArrayList<Integer> printMatrix(int [][] matrix) {
if(matrix==null||matrix.length==0) return new ArrayList<>();
int tR = 0;
int tC = 0;
int dR = matrix.length-1;
int dC = matrix[0].length-1;
while (tR<=dR&&tC<=dC){
print(matrix,tR++,tC++,dR--,dC--);//左上角的+1,右下角的-1
}
return res;
}
public void print(int[][] num,int tR,int tC,int dR,int dC){//打印一圈的函数
if(tR==dR){//当只剩下一行
for (int i = tC; i <=dC; i++) {
res.add(num[tR][i]);
}
}else if(tC==dC){//当只剩下一列
for (int i = tR; i <=dR; i++) {
res.add(num[i][tC]);
}
}else{
int curR=tR;//临时创建变量来记
int curC=tC;
while(curC!=dC){
res.add(num[tR][curC]);//从左到右
curC++;
}
while(curR!=dR){
res.add(num[curR][dC]);//从上到下
curR++;
}
while(curC!=tC){
res.add(num[dR][curC]);//从右到左
curC--;
}
while(curR!=tR){
res.add(num[curR][tC]);//从下到上
curR--;
}
}
}