码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer第十八题 顺时针打印矩阵

时间:2020-01-10 23:59:06      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:去掉   amp   解题思路   new   tom   print   int   offer   一个   

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

解题思路:一次去掉一个外圈,当最后只剩一行或一列时停止递归。(ps:这题就是绕,仔细点就解决了!!!)

 1 import java.util.ArrayList;
 2 public class Solution {
 3     public ArrayList<Integer> printMatrix(int [][] matrix) {
 4         ArrayList arr = new ArrayList();
 5         if(matrix==null||matrix.length==0){
 6             return arr;
 7         }else{
 8             way_getArr(matrix,0,matrix[0].length-1,0,matrix.length-1,arr);
 9             return arr;
10         }
11     }
12     public void way_getArr(int[][] matrix,int left,int right,int top,int bottom,ArrayList<Integer> arr){
13         if(left<right&&top<bottom){
14             for(int i=left;i<=right;i++){
15             arr.add(matrix[top][i]);
16             }
17             for(int j=top+1;j<=bottom;j++){
18                 arr.add(matrix[j][right]);
19             }
20             for(int k=right-1;k>=left;k--){
21                 arr.add(matrix[bottom][k]);
22             }
23             for(int l=bottom-1;l>top;l--){
24                 arr.add(matrix[l][left]);
25             }
26             way_getArr(matrix,left+1,right-1,top+1,bottom-1,arr);
27         }else if(left==right&&top<bottom){
28             for(int i=top;i<=bottom;i++){arr.add(matrix[i][left]);}
29         }else if(top==bottom&&left<right){
30             for(int i=left;i<=right;i++){arr.add(matrix[top][i]);}
31         }else if(left==right&&top==bottom){
32             arr.add(matrix[top][left]);
33         }else{}
34     }
35 }

打卡!!!

fighting??

剑指offer第十八题 顺时针打印矩阵

标签:去掉   amp   解题思路   new   tom   print   int   offer   一个   

原文地址:https://www.cnblogs.com/haq123/p/12178668.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!