顺时钟打印矩阵

xiaoxiao2021-02-28  116

1.题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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. 2.思路:每次输出最外层的矩阵值,然后层数减一,循环进行。值得注意的是特殊情况,当只剩下一列时,从上到下输出,与从下到上输出不能重复(判断条件是该轮循环所有的行是否都已经输出过了即rows-i-1 =i,此时该行对应的所有列不该继续停止输出)。同理只剩下一行时,从左到右与从右到左也不能重复输出(判断条件是该轮循环是否所有列都已经输出过,即cols-i-1 = i,此时该列对应的行停止输出)。 3.代码

package printMatrix; import java.util.ArrayList; import java.util.List; public class Solution { public static void main(String[] args) { int[][] matrix = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; //int[][] matrix = {{1},{2},{3},{4},{5}}; System.out.print(printMatrix(matrix)); } public static ArrayList<Integer> printMatrix(int [][] matrix) { int rows = matrix.length; //矩阵行数 int cols = matrix[0].length; //矩阵列数 ArrayList<Integer> list = new ArrayList<Integer>(); if(rows==0||cols==0) return list; int layers = (Math.min(rows, cols)-1)/2+1; for(int i=0;i<layers;i++){ for(int j=i;j<cols-i;j++) { //从左到右 list.add(matrix[i][j]); } for(int k =i+1;k<rows-i;k++) { //从上到下 list.add(matrix[k][cols-i-1]); } for(int m=cols-i-2;m>=i&&rows-i-1!=i;m--) { //从右到左 list.add(matrix[rows-i-1][m]); } for(int n=rows-i-2;n>i&&cols-i-1!=i;n--) { //从下到上 list.add(matrix[n][i]); } } return list; } }

4.结果 [1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10] 5.总结 该题来自《剑指offer》,以上代码可以直接利用,编写时候要不断调试,并考虑特殊情况。 注:参考牛客网

转载请注明原文地址: https://www.6miu.com/read-84091.html

最新回复(0)