Skip to content

Latest commit

 

History

History
74 lines (57 loc) · 1.6 KB

顺时针打印矩阵.md

File metadata and controls

74 lines (57 loc) · 1.6 KB

题目描述

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

##输入描述

一个矩阵

##输出描述

矩阵的顺序打印序列

##题目分析

解法   运行时间:33ms 占用内存:629k 

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
       if(matrix == null){
           return null;
       }
       ArrayList<Integer> list=new ArrayList<Integer> ();
       int row = matrix.length;
       int col = matrix[0].length;
        
       int left=0,right=col-1,up=0,down=row-1;
       while(left<=right&&up<=down){
           //左上到右上
           for(int i=left;i<=right;i++){
               list.add(matrix[up][i]);
           }
           //右上到右下
           for(int i=up+1;i<=down;i++){
                list.add(matrix[i][right]);
           }
           //右下到左下,判断是否与 左上到右上 重复
           if(up!=down){
               for(int i=right-1;i>=left;i--){
                   list.add(matrix[down][i]);
               }
           }
            //左下到左上,判断是否与 右上到右下 重复
           if(left!=right){
               for(int i=down-1;i>up;i--){
                   list.add(matrix[i][left]);
               }
           }
           left++;right--;up++;down--;
       }
        
      return list;
       
    }
}

这代码看似比较多,其实思路很简单:

①判空

②分别得到矩阵的行数和列数

③确定初始转一圈的上下左右四个点的位置

④根据这四个点依次把数据添加到list中,每转一圈要改变点的位置

⑤返回list