题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
思路 按层来模拟矩阵
1 设左上角元素为(r1,c1),右下角为(r2,c2)。
2 首先遍历(r1,col) col取值范围是是c1~c2;
3 再遍历(row,c2) row取值范围是是r1+1~r2;
4 再遍历(r2,col) col取值范围是是c2-1~c1; 此时要加入r1!=r2 防止出现矩阵只有一行的情况。
5 再遍历(row,c1) row取值范围是是r2-1~r1; 此时要加入c1!=c2 防止出现矩阵只有一列的情况。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> ans=new ArrayList();
int c1=0,r1=0,c2=matrix[0].length-1,r2=matrix.length-1;
while(c1<=c2&&r1<=r2)
{
for(int col=c1;col<=c2;col++)
ans.add(matrix[r1][col]);
for(int row=r1+1;row<=r2;row++)
ans.add(matrix[row][c2]);
for(int col=c2-1;col>=c1&&r1!=r2;col--)//防止出现单行
ans.add(matrix[r2][col]);
for(int row=r2-1;row>r1&&c1!=c2;row--)//防止出现单列
ans.add(matrix[row][c1]);
c1++;
c2--;
r1++;
r2--;
}
return ans;
}
}
其他的题题解
剑指offer题解 java版