zoukankan      html  css  js  c++  java
  • 按对角线打印矩阵

    1.按对角线打印矩阵:

       1.1 从左上角开始打印 同一层级的横坐标和纵坐标之和相等

    /**
         * 沿对角线打印
         * 同一层级的横坐标和纵坐标之和相等
         *
         * @param
         */
        private static void slash(int[][] matrix) {
            int cols = matrix[0].length;
            int rows = matrix.length;
            //层级
            for (int l = 0; l < cols + rows - 1; l++) {
                int sum = l;
                for (int i = 0; i < rows; i++) {
                    int j = sum - i;
                    if (i >= 0 && i < rows && j >= 0 && j < cols) {
                        System.out.print(matrix[i][j] + " ");
                        //System.out.print("i: " + i + " j: " + j + "  ");
                    }
    
                }
                System.out.println();
            }
    
        }

    1.2 从右上角开始打印 同一层级横坐标和纵坐标的差相等

    private static void backSlash(int[][] matrix) {
            int cols = matrix[0].length;
            int rows = matrix.length;
    
            for (int l = 0; l < rows + cols - 1; l++) {
                int diff = cols - l - 1;
                for (int j = 0; j < cols; j++) {
                    int i = j - diff;
                    if (i >= 0 && i < rows && j >= 0 && j < cols) {
                        /*System.out.print("i: " + i + " j: " + j + "  ");*/
                        System.out.print(matrix[i][j] + " ");
                    }
    
                }
                System.out.println();
            }

    2.完整代码如下:

    package cn.cb.offer.meituan;
    
    /**
     * Created by xingxing.duan on 2015/10/31.
     * 按对角线打印矩阵
     */
    public class MatrixPrint {
    
        /* example:
        * [ 1, 2, 3, 4]
        * [ 5, 6, 7, 8]
        * [ 9,10,11,12]
        * [13,14,15,16]
        * <p/>
        * print
        * 1
        * 2,5
        * 3,6,9
        * 4,7,10,13
        * ............
        */
        private static void print(int[][] matrix, int cols, int rows) {
    
            int level = rows + cols; //一共打印的层数
            for (int l = 0; l < level; l++) {
                int j;
    
                if (l < cols) {
                    j = l;
                } else {
                    j = cols - 1;
                }
    
                int i = l - j;
                while (i <= l && i < rows) {
                    System.out.print(matrix[i][j] + " ");
                    /*System.out.print("i: " + i + " j: " + j + "  ");*/
                    j--;
                    i++;
                }
                System.out.println();
            }
    
        }
    
        /**
         * 沿对角线打印
         * 同一层级的横坐标和纵坐标之和相等
         *
         * @param
         */
        private static void slash(int[][] matrix) {
            int cols = matrix[0].length;
            int rows = matrix.length;
            //层级
            for (int l = 0; l < cols + rows - 1; l++) {
                int sum = l;
                for (int i = 0; i < rows; i++) {
                    int j = sum - i;
                    if (i >= 0 && i < rows && j >= 0 && j < cols) {
                        System.out.print(matrix[i][j] + " ");
                        //System.out.print("i: " + i + " j: " + j + "  ");
                    }
    
                }
                System.out.println();
            }
    
        }
    
        private static void backSlash(int[][] matrix) {
            int cols = matrix[0].length;
            int rows = matrix.length;
    
            for (int l = 0; l < rows + cols - 1; l++) {
                int diff = cols - l - 1;
                for (int j = 0; j < cols; j++) {
                    int i = j - diff;
                    if (i >= 0 && i < rows && j >= 0 && j < cols) {
                        /*System.out.print("i: " + i + " j: " + j + "  ");*/
                        System.out.print(matrix[i][j] + " ");
                    }
    
                }
                System.out.println();
            }
    
        }
    
        public static void main(String[] args) {
    
            int[][] martix = new int[4][4];
            int v = 1;
            for (int i = 0; i < martix.length; i++) {
                for (int j = 0; j < martix[i].length; j++) {
                    martix[i][j] = v;
                    v++;
                }
            }
    
            slash(martix);
            System.out.println("========================");
            backSlash(martix);
        }
    }
  • 相关阅读:
    【转帖】如何学好 C 语言
    设计模式:单件模式(Singleton Pattern)
    如果软件正在占领全世界.为什么程序员得不到任何尊重?
    【转】程序员技术练级攻略
    JS闭包理解的彻底吗?
    设计模式:原型模式(Prototype Pattern)
    关于基础类型
    IIS5和IIS6的Asp.net应用程序生命周期事件和Global.asax文件
    App_Code文件夹和Bin文件夹
    构造函数
  • 原文地址:https://www.cnblogs.com/duanxingxing/p/4928907.html
Copyright © 2011-2022 走看看