《劍指 offer》 學習19之順時針打印矩陣

題目描述

輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,例如,如果輸入如下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 Main {
 
	public static void main(String[] args) {
		int[][] numbers = {
                {1, 2, 3, 4},
                {5, 6, 7, 8},
                {9, 10, 11, 12},
                {13, 14, 15, 16}
            };
        
        ArrayList list = printMatrix(numbers);
        printList(list);
        
       
	}
	
	public static ArrayList<Integer> printMatrix(int[][] matrix) {
	    ArrayList<Integer> list = new ArrayList<>();
	    int r1 = 0;
	    int r2 = matrix.length - 1;
	    int c1 = 0;
	    int c2 = matrix[0].length - 1;
	    
	    while(r1 <= r2 && c1 <= c2) {
	        for (int i = c1; i <= c2;i++) {
	            list.add(matrix[r1][i]);
	        } 
	        
	        for (int j = r1 + 1;j <= r2;j++) {
	            list.add(matrix[j][c2]);
	        } 
	        
	        if (r1 != r2) {
	            for (int m = c2 - 1;m >= c1;m--) {
	                list.add(matrix[r2][m]);
	            } 
	        } 
	        
	        if (c1 != c2) {
	            for (int n = r2 - 1;n > r1;n--) {
	                list.add(matrix[n][c1]);
	            } 
	        } 
	        r1++;
	        r2--;
	        c1++;
	        c2--;
	    }
	    
	    return list;
	}
	
	public static void printList(ArrayList list) {
	    for (int i = 0;i < list.size();i++) {
	        System.out.print(list.get(i) + " ");
	    } 
	    System.out.println();   
	}
}

輸出結果

image.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章