Q14--顺时针打印矩阵

来源:互联网 发布:mac虚拟机 win7 win10 编辑:程序博客网 时间:2024/06/05 02:34

一、题目描述

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

二、Java代码实现

import java.util.ArrayList;    public class PrintMatrixClockWisely {        public static void main(String[] args){            int[][] matrix = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};            ArrayList<Integer> al = printMatrix(matrix);            System.out.println(al);        }        public static ArrayList<Integer> printMatrix(int[][] matrix){            ArrayList<Integer> list = new ArrayList<Integer>();            if(list == null) return list;            int rows = matrix.length;            int columns = matrix[0].length;            return printMatrix(matrix, columns, rows);        }        public static ArrayList<Integer>  printMatrix(int[][] matrix,int columns, int rows){            ArrayList<Integer> list = new ArrayList<Integer>();            if(matrix == null || columns <=0 || rows <=0) return list;            int start = 0;            while(columns > start *2 && rows > start * 2){                list.addAll(print (matrix, columns, rows, start));                ++start;            }            return list;        }        public static ArrayList<Integer> print(int[][] matrix, int columns, int rows, int start){            ArrayList<Integer> list = new ArrayList<Integer>();            int endX  = columns - 1 - start;            int endY = rows - 1 -start;            //从左到右            for(int i = start; i <= endX; ++i)                list.add(matrix[start][i]);            //      从上到下            if(start < endY){                for(int i = start +1; i <= endY; ++i)                    list.add(matrix[i][endX ]);            }            //      从右到左            if(start < endX && start < endY){ //至少两行两列                 for(int i = endX -1; i >= start; --i)                    list.add(matrix[endY][i]);            }            //      从下到上            if(start < endX && start < endY-1){                for(int i = endY-1; i > start; --i)                    list.add(matrix[i][start]);            }            return list;        }    }
0 0