从下到上按对角线打印2d阵列



我的java prgm 中有一个二维数组

[ 1 2 3   
  4 5 6  
  7 8 9 ]

如何按顺时针方向对角排列这个矩阵。。如

[ 9 8 6  
  7 5 3  
  4 2 1 ]

这应该适用于N阶的所有平方矩阵。有人能帮我吗

class try2
   {
    public static void main (String[] args) throws java.lang.Exception
    {

 int[][] elements = new int[][]{
            {1,5,9,13},
            {2,6,10,14},
            {3,7,11,15},
            {4,8,12,16}
    };

    int i=0,j=0,k=0,l = 0;
    int rows = 4,columns = 4;
    // Elements to the left of secondary diagonal elements. 
    while(i<rows){
        k = i;
        j=0;
       // System.out.print("1 loop");
         //System.out.println(" "+k+""+j);
        while(k>=0 && j>=0 && k<rows && j<columns){
            System.out.print(elements[k][j]+" ");
            j++;
            k--;
        }
        i++;
        System.out.println();
    }
    i = rows-1;
    j = 1;
    // elements to the right of secondary diagonal elements. 
    while(j<columns){
        k = i;
        l = j;
       //System.out.print("2 loop");
         //System.out.println(" "+k+""+l);
        while(l<columns){
            System.out.print(elements[k][l]+" ");
            l++;
            k--;
        }
        System.out.println();
        j++;
    }
}
}

输出为

1  
2 5  
3 6 9  
4 7 10 13   
8 11 14   
12 15   
16 

所需输出为

16  
12 15  
8 11 14  
4 7 10 13  
3 6 9  
2 5  
1

这里是:

class Diag
{
    public static void main(String[] args) throws java.lang.Exception
    {
        int[][] elements = new int[][] { 
                { 1, 5, 9, 13 }, 
                { 2, 6, 10, 14 }, 
                { 3, 7, 11, 15 }, 
                { 4, 8, 12, 16 } };
        int R = elements.length;
        int C = elements[0].length;
        for (int row = R - 1, col = C - 1; row >= 0 && col >= 0;)
        {
            if (col == C - 1 && row != 0)
            {
                System.out.println(elements[row][col]);
                col = row - 1;
                row = R - 1;
                continue;
            }
            if (row == 0)
            {
                System.out.println(elements[row][col]);
                row = col - 1;
                col = 0;
                continue;
            }
            System.out.print(elements[row][col] + " ");
            row = (row - 1 + R) % R;
            col = (col + 1) % C;
        }
    }
}
    class Solution {
  public static void main(String[] args) {
int a[][] = {{1, 2, 3, 4},
             {5, 6, 7, 8},
             {9, 10, 11, 12}};
int i=0,j=0;
while(i<a[0].length){
    printDiagonal(0,i++,a,a[0].length,a.length);
  if(i!=a[0].length-1)
    System.out.println();
}
i = 0;
int len = a[0].length-1;
while(i<a.length){
    printDiagonal(i++,len,a,a.length,a[0].length);
    System.out.println();
}
}
public static void printDiagonal(int x, int y, int[][] A, int l1, int l2) {
while(x >= 0 && y >= 0 && x < l1 && y < l2)
  System.out.print(A[x++][y--] + " ");
}
}

最新更新