首页 > 代码库 > 顺时针打印矩阵

顺时针打印矩阵

题目描述

  输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,

  例如,如果输入如下矩阵:

        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.

算法思想

  先打印最上面一行,从左向右,
  然后判断是否有必要从上向下打印(如果数组只有一行的话这个if语句其实就不走了),
  接着判断是否有必要从右向左打印(至少两列,只有一列的时候走了前两个if之后就打印结束了),
  接着判断是否有必要从下到上打印(至少三行,只有两行的时候,走了前三个if打印就结束了).

代码如下:

import java.util.*;public class Solution {    public ArrayList<Integer> printMatrix(int [][] matrix) {        int startX = 0;        int endX = matrix[0].length-1;        int startY = 0;        int endY = matrix.length -1;        ArrayList<Integer> result = new ArrayList();          while (startX <= endX && startY <= endY) {             // 从左到右            if(startX <= endX){                for (int i = startX; i <= endX; i++) {                    result.add(matrix[startY][i]);                }            }                          // 从上往下,此处没有=号,至少两行时             if (startY < endY) {                 for (int i = startY + 1; i <= endY; i++) {                     result.add(matrix[i][endX]);                }            }             // 从右往左,至少两行两列            if (startX < endX && endY > startY) {                for (int i = endX - 1; i >= startX; i--) {                    result.add(matrix[endY][i]);                }            }                         // 从下往上打印,至少三行两列            if (startY < endY-1 && endX > startX) {                for (int i = endY - 1; i >= startY + 1; i--) {                    result.add(matrix[i][startX]);                }            }             startX++;            endX--;            startY++;            endY--;        }        return result;                   }}

 

顺时针打印矩阵