顺时针打印矩阵

来源:互联网 发布:mac怎么换壁纸 编辑:程序博客网 时间:2024/05/23 16:56

题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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     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


public class Solution {
public ArrayList<Integer> printMatrix(int[][] matrix) {
ArrayList<Integer> list = new ArrayList<Integer>();
if (matrix == null) {
return list;
}
int rows = matrix.length; // 行数
int columns = matrix[0].length; // 列数

// 每次从(0,0) (1,1) (2,2)开始的
int times = 0; // 第几次循环
while(rows > times * 2 && columns > times * 2){

int numX = columns - 1 - times;
int numY = rows - 1 - times;
// 打印第一横行
for (int i = times; i <= numX; i++) {
System.out.print(matrix[times][i] + " ");
list.add(matrix[times][i]);
}
if (times < numY) {
// 打印第一列
for (int i = times + 1; i <= numY; i++) {
System.out.print(matrix[i][numX] + " ");
list.add(matrix[i][numX]);
}
}
if (times < numX && times < numY) {
// 打印最下面的一行
for (int i = numX - 1; i >= times; i--) {
System.out.print(matrix[numY][i] + " ");
list.add(matrix[numY][i]);
}
}
if (times < numX && times < numY - 1) {
// 打印最左边的一列
for (int i = numY - 1; i >= times + 1; i--) {
System.out.print(matrix[i][times] + " ");
list.add(matrix[i][times]);
}
}
times++;
}
return list;
}
public static void main(String[] args) {
Solution s = new Solution();
// int[][] num = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12
// },{13, 14, 15, 16 } };
int[][] num = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}};
ArrayList<Integer> list = s.printMatrix(num);
System.out.println(list);
}
}


0 0
原创粉丝点击