java实现,一圈一圈从外向内打印,每一圈分成上右下右四个一维数组,注意边界和不要多余打印
顺时针打印矩阵
http://www.nowcoder.com/questionTerminal/9b4c81a02cd34f76be2659fa0d54342a
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> ans = new ArrayList<>();
/**
* 最外层一个while循环,
* 每层分为上,右,下,左四个一维数组打印,
*/
public ArrayList<Integer> printMatrix(int [][] matrix) {
int rs = 0;
int cs = 0;
int re = matrix.length-1;
int ce = matrix[0].length-1;
while (re>=rs && ce>=cs){
print(matrix,rs++,re--,cs++,ce--);
}
return ans;
}
public void print(int [][] matrix, int rs,int re, int cs, int ce){
// 第一行
for (int i= cs; i<=ce;i++){
ans.add(matrix[rs][i]);
}
for (int i= rs+1; i<=re;i++){
ans.add(matrix[i][ce]);
}
// 最后一行
if (re>rs){
for (int i= ce-1; i>=cs;i--){
ans.add(matrix[re][i]);
}
}
// 最后一列
if (ce>cs){
for (int i= re-1; i>=rs+1;i--){
ans.add(matrix[i][cs]);
}
}
}
}