这个题其实就是先找左上角、右下角两个点,将最外侧圆圈先打印出来,然后将左上、右下各沿对角线往里运动,然后打印内圈。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int[][] matrix) {
int lefttoprow = 0;
int lefttopcol = 0;
int rightbottomrow = matrix.length-1;
int rightbottomcol = matrix[0].length-1;
ArrayList<Integer> res = new ArrayList();
while(lefttoprow<=rightbottomrow && lefttopcol<=rightbottomcol){
printEdge(matrix,lefttoprow++,lefttopcol++,rightbottomrow--,rightbottomcol--,res);
}
return res;
}
public void printEdge(int[][] matrix,int lefttoprow,int lefttopcol,int rightbottomrow,int rightbottomcol,ArrayList<Integer> res){
//就一行
if(lefttoprow == rightbottomrow){
for(int i=lefttopcol;i<=rightbottomcol;i++){
res.add(matrix[lefttoprow][i]);
}
}
//就一列
else if(lefttopcol == rightbottomcol){
for(int i=lefttoprow;i<=rightbottomrow;i++){
res.add(matrix[i][lefttopcol]);
}
}else{ //打印四条边
int currow = lefttoprow;
int curcol = lefttopcol;
while(curcol != rightbottomcol){
res.add(matrix[lefttoprow][curcol]);
curcol++;
}
while(currow != rightbottomrow){
res.add(matrix[currow][rightbottomcol]);
currow++;
}
while(curcol != lefttopcol){
res.add(matrix[rightbottomrow][curcol]);
curcol--;
}
while(currow != lefttoprow){
res.add(matrix[currow][lefttopcol]);
currow--;
}
}
}
}