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]);
        }
    }
    
}
上一篇 下一篇

猜你喜欢

热点阅读