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

这是碰到的第一个钻牛角尖的算法题,刚开始思路不停的跑偏,总想着一行或者一列之间行列号有什么关系,可是找寻好久并无规律可循

在网上看了大神们写的代码,瞬间被秒成了渣渣

思路:

  先定义一个ArrayList集合,再按顺时针顺序把每一个元素加到集合中去,再遍历集合就可拿到每一个数据了

  代码奉上:

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

并提醒自己不要钻牛角尖不要钻牛角尖!!!!

原文地址:https://www.cnblogs.com/rgever/p/8779784.html