簡體   English   中英

將方陣旋轉90度

[英]Rotating a square matrix by 90 degrees

這是我在Java中將方矩陣順時針旋轉90度的代碼。

import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {
    // write your code here
        int size = 4;
        int[][] matrix = new int[size][size];
        for (int i = 0; i < size ; i++) {
            for (int j = 0; j < size; j++) {

                matrix[i][j] = (i+(2*j));
            }
        }
        trace(matrix, size);
        rotate(matrix);
        System.out.println("________________________");
        trace(matrix, size);

    }

    public static void rotate(int[][] matrix){
        int stop = matrix.length -1;

        rotate(matrix, stop, 0);
    }

    public static void rotate(int[][] matrix, int stop, int start){

        if(start - stop == 1) return;

        ArrayList<Integer> temp = new ArrayList<>();

        //save top row in an array
        for (int i = start; i <= stop ; i++) {
            temp.add(matrix[start][i]);
        }

        //left goes to top
        for (int i = start; i <= stop ; i++) {
            matrix[start][i] = matrix[stop - i][start];
        }

        //bottom goes to left
        for (int i = start; i <= stop ; i++) {
            matrix[i][start] = matrix[stop][i];
        }

        //right goes to bottom
        for (int i = start; i <= stop ; i++) {
            matrix[stop][stop - i] = matrix[i][stop];
        }

        //temp array goes to right
        for (int i = 0; i < temp.size() ; i++) {
            matrix[start + i][stop] = temp.get(i);
        }

        rotate(matrix, stop-1, start + 1);
    }



    public static void trace(int[][] matrix, int size){
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size ; j++) {
                System.out.print(matrix[i][j] + " ");

            }
            System.out.println();
        }
    }
}

原始數組和輸出如下所示,

0 2 4 6 
1 3 5 7 
2 4 6 8 
3 5 7 9 
________________________
3 2 1 0 
5 4 3 2 
6 2 5 4 
3 8 7 6 

顯然答案並不完全正確。 雖然快到了。 我對這些錯誤有些迷惑,對任何幫助都感激不盡。

此代碼似乎工作正常。 這里的測試用例是一個8x8的矩陣,對於您的測試用例,將其縮放回4x4。

public class Main {

public static void main(String[] args) {
// write your code here
    int size = 8;
    int[][] matrix = new int[size][size];
    for (int i = 0; i < size ; i++) {
        for (int j = 0; j < size; j++) {

            matrix[i][j] = (i+(2*j));
        }
    }
    trace(matrix, size);
    rotate(matrix);
    System.out.println("________________________");
    trace(matrix, size);

}

public static void rotate(int[][] matrix){
    int stop = matrix.length -1;

    rotate(matrix, stop, 0);
}

public static void rotate(int[][] matrix, int stop, int start){

    if(start - stop == 1) return;

    int [] temp = new int[stop-start];

    //save top row in an array
    for (int i = 0; i < stop-start ; i++) {
        temp[i] = matrix[start][start+i+1];
    }
    //System.out.println(Arrays.toString(temp));

    //left goes to top
    for (int i = start; i < stop ; i++) {
        matrix[start][start+stop-i] = matrix[i][start];
    }

    //bottom goes to left
    for (int i = start; i < stop ; i++) {
        matrix[i][start] = matrix[stop][i];
    }

    //right goes to bottom
    for (int i = start; i < stop ; i++) {
        matrix[stop][i] = matrix[start+stop-i][stop];
    }

    //temp array goes to right
    for (int i = 0; i < temp.length ; i++) {
        matrix[start + i + 1][stop] = temp[i];
    }

    rotate(matrix, stop-1, start + 1);
}



public static void trace(int[][] matrix, int size){
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size ; j++) {
            System.out.printf("%2d ", matrix[i][j]);

        }
        System.out.println();
    }
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM