题目描述:给你一个二维数组,顺时针打印这个数组
思路:
每次打印最外围一圈,最难的是条件的判断,特殊情况,如果是1*1,1*2,2*1这三种情况得考虑如何处理。
先算出这个矩阵有多少圈,再循环打印圈
从左往右,起始位置为每个圈的最左上角,一直打印到最右上角
从上往下,起始位置为最右上角的下面那个位置,一直打印到右下角
从右往左,先判断是否有两行及以上,若只有一行则会是重复打印,起始位置为最右下角的左边那个位置,一直打印到左下角
从下往上,先判断是否有两列及以上,否则会会重复打印,起始位置为最左下角上面那个位置,一直打印到左上角下面那个位置
java代码:
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> res = new ArrayList<Integer>();
int row = matrix.length;
int col = matrix[0].length;
int k =0,m=0;
if(row >= col)
k = (col-1)/2 +1;
else
k = (row-1)/2 +1;
while(m<k&&k!=0){
for(int i =m;i<col-m;i++){
res.add(matrix[m][i]);
}
for(int i =m+1;i<row-m;i++){
res.add(matrix[i][col-m-1]);
}
if(row-m-1!=m)
for(int i =col-m-2;i>=m;i--){
res.add(matrix[row-m-1][i]);
}
if(col-m-1!=m)
for(int i =row-m-2;i>m;i--){
res.add(matrix[i][m]);
}
m++;
}
return res;
}
}