天天看點

JZ-19順時針列印矩陣

題目描述

輸入一個矩陣,按照從外向裡以順時針的順序依次列印出每一個數字,例如,如果輸入如下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.

思路

首先定義邊界,将左和上設定為0,右和下設定為第一維和第二維的長度值,然後将第一行放入定義的數組,然後上加1,然後将最後一列除第一行的數外放入矩陣,然後右減1,然後然後将最後一行除最後一列的數外放入矩陣,然後後減1,然後将最左一列除最上一行的數外放入矩陣,然後左加1,疊代直到所有數都放入數組。

import java.util.ArrayList;

public class Solution

{

    public ArrayList<Integer> printMatrix(int [][] matrix)

    {

        ArrayList<Integer> arr=new ArrayList<>();

        if(matrix.length==0||matrix[0].length==0||matrix==null)

        {

            return arr;

        }

        int right=matrix[0].length-1;

        int left=0;

        int up=0;

        int down=matrix.length-1;

        while(true)

        {

            for(int col=left;col<=right;col++)

            {

                arr.add(matrix[up][col]);

            }

            up++;

            if(up>down)

            {

                break;

            }

            for(int col=up;col<=down;col++)

            {

                arr.add(matrix[col][right]);

            }

            right--;

            if(left>right)

            {

                break;

            }

            for(int col=right;col>=left;col--)

            {

                arr.add(matrix[down][col]);

            }

            down--;

            if(up>down)

            {

                break;

            }

            for(int col=down;col>=up;col--)

            {

                arr.add(matrix[col][left]);

            }

            left++;

            if(left>right)

            {

                break;

            }

        }

        return arr;

    }

}