[名企面试知识点][Java]顺时针打印矩阵
发布于 2017-03-06 14:47 1850 次浏览 0 赞 来自 笔试面试  

题目描述

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


添加回复
回到顶部