顺时针打印矩阵

题目描述

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

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

        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;
        
       
    }
}

 

posted @ 2016-08-31 11:32  隋雪儿吖  阅读(301)  评论(0编辑  收藏  举报