29、顺时针打印矩阵
2019-09-27 本文已影响0人
GIndoc
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
if(matrix==null || matrix.length==0) return null;
int x = matrix.length/2;
if(matrix.length%2!=0) ++x;
int y = matrix[0].length/2;
if(matrix[0].length%2!=0) ++y;
ArrayList<Integer> result = new ArrayList<Integer>();
for(int i=0; i<x && i<y; ++i){
printResult(result, matrix, i);
}
return result;
}
private void printResult(ArrayList<Integer> result, int[][] matrix, int start){
// 第一行数据
for(int i=start;i<matrix[start].length-start;++i){
result.add(matrix[start][i]);
}
int column = matrix[start].length-start-1;
// 最后一列数据
for(int i=start+1;i<matrix.length-start;++i){
result.add(matrix[i][column]);
}
int row = matrix.length-start-1;
// 如果只有一行数据,不从右往左遍历
if(row<=start) return;
// 最后一行数据
for(int i=column-1;i>=start;--i){
result.add(matrix[row][i]);
}
// 如果只有一列数据,不从下往上遍历
if(column<=start) return;
// 第一列数据
for(int i=row-1;i>start;--i){
result.add(matrix[i][start]);
}
}
}