标签:数组
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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、判断条件是否要加等号
2、循环结束条件
3、对于一列一行或者只有一个数,放在哪里算
参考代码
import java.util.ArrayList;
public class PrintMatrix {
public ArrayList<Integer> printMatrix(int [][] matrix) {
//不是方阵,行和列单独算
int row = matrix.length;
int col = matrix[0].length;
//判空
ArrayList<Integer> res = new ArrayList<>();
if(row==0 && col==0)
return res;
//
int left = 0, right = col - 1;
int top = 0, bottom = row - 1;
while(left <= right && top <= bottom){
//左到右
for(int i=left; i<=right; i++)
res.add(matrix[top][i]);
//上到下
for(int j=top+1; j<=bottom; j++ )
res.add(matrix[j][right]);
//下到上要判断是否是单行
if(top != bottom){
for(int i= right-1; i>=left; i--)
res.add(matrix[bottom][i]);
}
//右到左要判断是否是单列
if(left != right){
for(int j=bottom-1; j>top; j--)
res.add(matrix[j][left]);
}
left++;
right--;
top++;
bottom--;
}
return res;
}
public static void main(String[] args) {
PrintMatrix p = new PrintMatrix();
int[][] matrix = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
ArrayList<Integer> result = new ArrayList<>();
result = p.printMatrix(matrix);
for(int i: result)
System.out.print(i);
}
}