输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,
例如,如果输入如下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.
魔方旋转解法:
将这个矩阵每次去掉第一行,再旋转矩阵,再去掉第一行,再旋转;
抱歉没有实现,仅提供想法;
通用的基本解法:
分类处理
import java.util.ArrayList; public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { int length = matrix.length; //行长度:矩阵的长 int width = matrix[0].length; //列长度:矩阵的宽 ArrayList<Integer> arrayList = new ArrayList<Integer>(); if(matrix == null || length==0 || width==0) return null; if(length==1){ for(int a1 = 0;a1<width;a1++){ arrayList.add(matrix[0][a1]); } return arrayList; } if(width==1){ for(int a2 = 0;a2<length;a2++){ arrayList.add(matrix[a2][0]); } return arrayList; } //一次循环是一圈 for(int i =0;i<length-i;i++){ int j=i; if(j<width-i) { //一圈的上边 for (;j<width - i; j++) { arrayList.add(matrix[i][j]); } //一圈的右边 for (int k = i + 1; k < length - i; k++) { arrayList.add(matrix[k][width - 1 - i]); } int f = length - 1 - i; //下边所在的行数 if (f != i) { //一圈的下边 for (int m = width - 1 - i - 1; m >= i; m--) { arrayList.add(matrix[f][m]); } //一圈的左边 for (int n = f - 1; n > i; n--) { arrayList.add(matrix[n][i]); } } } } return arrayList; } }
原文:https://www.cnblogs.com/wzQingtTian/p/10662563.html