输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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) {
int m = matrix.length;
int n = matrix[0].length;
int lr = 0;
int lc = 0;
int rr = m-1;
int rc = n-1;
ArrayList<Integer> res = new ArrayList<>();
while(lr <= rr&&lc <= rc){
printMatrix(res,matrix,lr++,lc++,rr--,rc--);
}
return res;
}
public void printMatrix(ArrayList<Integer> res,int[][] matrix,int lr,int lc,int rr,int rc){
if(rr == lr){
for(int i = lc;i <= rc;i++){
res.add(matrix[rr][i]);
}
return;
}
if(rc == lc){
for(int i = lr;i <= rr;i++){
res.add(matrix[i][rc]);
}
return;
}
for(int i = lc;i < rc;i++){//开头是lc,不是0,要记住,后面一样
res.add(matrix[lr][i]);
}
for(int i = lr;i < rr;i++){
res.add(matrix[i][rc]);
}
for(int i = rc;i > lc;i--){
res.add(matrix[rr][i]);
}
for(int i = rr;i > lr;i--){
res.add(matrix[i][lc]);
}
}
}
来源:CSDN
作者:fsdgfsf
链接:https://blog.csdn.net/fsdgfsf/article/details/103749255