Java實現逆時針打印矩陣。即輸入一個矩陣,按照從外向里逆時針的順序打印出每一個數字。 -开发者知识库

Java實現逆時針打印矩陣。即輸入一個矩陣,按照從外向里逆時針的順序打印出每一個數字。 -开发者知识库,第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

首先我們觀察 4 × 4的矩陣

Java實現逆時針打印矩陣。即輸入一個矩陣,按照從外向里逆時針的順序打印出每一個數字。 -开发者知识库,第2张

再觀察 5 × 5的矩陣

Java實現逆時針打印矩陣。即輸入一個矩陣,按照從外向里逆時針的順序打印出每一個數字。 -开发者知识库,第3张

由此我們可以觀察出讓循環繼續進行的條件是:

矩陣的行數>當前的圈數×2且同時要滿足矩陣的列數>當前的圈數×2.

import java.util.ArrayList;
public class MyReversePrint
{  
	public static void main(String[] args)  
    {  
        int[][] array =  
        {  
                { 1, 2, 3, 4 },  
                { 5, 6, 7, 8 },  
                { 9, 10, 11, 12 },  
                { 13, 14, 15, 16 } };   
        ArrayList<Integer> printList = new ArrayList<Integer>();  
        printList = reversePrint(array);  
        for (int i = 0; i < printList.size(); i  )  
        {  
            System.out.print(printList.get(i)   "");  
        }  
    }  
    public static ArrayList<Integer> reversePrint(int[][] array)  
    {  
        // 二位數組(矩陣)的行數  
        int rows = array.length;  
        // 二位數組(矩陣)的列數  
        int columns = array[0].length;    
        ArrayList<Integer> myList = new ArrayList<Integer>();  
        // start表示圈數,從第0圈開始計數,沒走一圈 圈數 1
        int start = 0;  
        //讓循環繼續進行的條件是:矩陣的行數>當前的圈數×2且同時要滿足矩陣的列數>當前的圈數×2.
        while (rows > start * 2 && columns > start * 2)  
        {  
            //記錄每圈最后一行的下標
            int endRow = rows - 1 - start;  
            //記錄沒圈最后一列的下標  
            int endColumn = columns - 1 - start;  
            //一圈圈逆序遍歷數組中的元素,並插入到myList中
            //1.從左到右  
            for (int i = start; i <= endColumn; i  )  
                myList.add(array[start][i]);  
            //2.從上到下  
            if (endRow > start)  
            {  
                for (int i = start   1; i <= endRow; i  )  
                    myList.add(array[i][endColumn]);  
            }  
            //3.從右到左
            if (endRow > start && endColumn > start)  
            {  
                for (int i = endColumn - 1; i >= start; i--)  
                    myList.add(array[endRow][i]);  
            }  
            //4.從下到上
            if (endRow >= start   2 && endColumn > start)  
            {  
                for (int i = endRow - 1; i > start; i--)  
                    myList.add(array[i][start]);  
            }  
            //圈數自增
            start  ;  
        }  
        return myList;  
    }    
}  
最佳答案:


本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复