顺时针打印矩阵

题目描述

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

详解

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

定义四个指针 up down left right

先遍历 1 2 3 4 结束后up+1

再遍历8 12 16 结束后right-1

再遍历15 14 13 结束后down+1

再遍历 9 5 结束后left+1

 

完整程序

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0){
            return null;
        }
        ArrayList<Integer> list = new ArrayList<>();
        int up = 0;
        int down = matrix.length - 1;
        int left = 0;
        int right = matrix[0].length - 1;
        while (true){
            //最上面一行
            for (int i = left; i <= right; i++){
                list.add(matrix[up][i]);
            }
            up++;
            if (up > down){
                break;
            }
            //最右边一列
            for (int i1 = up; i1 <= down; i1++){
                list.add(matrix[i1][right]);
            }
            right--;
            if (left > right){
                break;
            }
            //最下面一行
            for (int j = right; j >=left; j--){
                list.add(matrix[down][j]);
            }
            down--;
            if (up > down){
                break;
            }
            //最左边一列
            for (int j1 = down;j1>=up;j1--){
                list.add(matrix[j1][left]);
            }
            left++;
            if (left > right){
                break;
            }
        }
        return list;
    }
}

  

 

posted @ 2020-03-20 15:47  xxcnotes  阅读(191)  评论(0)    收藏  举报