java,根据对角线打印矩阵

来源:互联网 发布:mac版的easysketch 编辑:程序博客网 时间:2024/06/06 03:42
1. 问题描述:
输入一个矩阵,从右上角开始按照斜对角线打印矩阵的值,如矩阵为:
1, 2,  3,  4
5, 6,  7,  8
9, 10, 11, 12
13,14, 15, 16
输出:
4, 3, 8, 2, 7, 12, 1, 6, 11, 16, 5, 10, 15, 9, 14, 13

2. 思路:
思路:
将整个输出以最长的斜对角线分为两部分:右上部分和左下部分。
右上部分:对角线的起点在第一行,列数递减,对角线上相邻元素之间横坐标和纵坐标均相差1;
左下部分:对角线的起点在第一列上,行数递减,对角线上相邻元素之间横坐标和纵坐标均相差1;

复杂度:O(n^2)

3.代码

public class Main {    public static void main(String[] args) {        Main main = new Main();        int[][] a = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};        main.print(a,4);    }    private void print(int a[][], int n) {        int row;        int col;        //输出右上角代码,包括对角线上的元素        for (int i = n - 1; i >= 0; i--) {//每次都是从第0行开始,所以需要row = 0,然后row  col  同时自增            row = 0;            col = i;            while (row >= 0 && row < n && col >= 0 && col < n) {                System.out.println(a[row][col]);                row++;                col++;            }        }        //for输出左下角代码,对角线上的元素已经打印完了,所以在这里从1开始        for (int i = 1; i <= n - 1; i++) {//每次都是从第0列开始,所以需要col = 0,然后row  col  同时自增            row = i;            col = 0;            while (row >= 0 && row < n && col >= 0 && col < n) {                System.out.println(a[row][col]);                row++;                col++;            }        }    }//print}////4//3//8//2//7//12//1//6//11//16//5//10//15//9//14//13