17、顺时针打印矩阵
题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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 {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> resultlist = new ArrayList<>();
int zR =0;
int zC =0;
int yR =matrix.length-1;
int yC =matrix[0].length-1;
while(zR<=yR && zC<=yC){
resultlist= printEdge(matrix,zR,zC,yR,yC);
zR++;
zC++;
yR--;
yC--;
}
return resultlist;
}
ArrayList<Integer> templist = new ArrayList<>();
public ArrayList<Integer> printEdge(int[][] matrix,int zR,int zC,int yR,int yC ){
if(zR==yR){
for(int i=zC;i<=yC;i++){
templist.add(matrix[zR][i]);
}
}else if(zC==yC){
for(int i=zR;i<=yR;i++){
templist.add(matrix[i][zC]);
}
}else{
int curR = zR;
int curC = zC;
while(curC!=yC){
templist.add(matrix[zR][curC]);
curC++;
}
while(curR!=yR){
templist.add(matrix[curR][yC]);
curR++;
}
while(curC!=zC){
templist.add(matrix[yR][curC]);
curC--;
}
while(curR!=zR){
templist.add(matrix[curR][zC]);
curR--;
}
}
return templist;
}
}