zoukankan      html  css  js  c++  java
  • 对角线遍历

    题目:对角线遍历

    问题描述:

    给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。

    解决思路:


    根据上面的图我们可以得到如下信息:

    1、遍历的方向有两个:先是"右上"方向,然后是"左下"方向,然后再是"右上"方向,再是"左下"方向... ...

    2、遍历有4种临界情况:当继续向下遍历的元素的行或列小于0时(分别对应于元素1和元素4的情况);当继续向下遍历的元素的行或列超出数组的行或列时(分别对应于元素8和元素3的情况)。并且应当注意当发生这种临界情况时,遍历的方向也会发生相应的变化。

    有了以上的信息,我们就可以定义一个二维数组tran来表示遍历的方向,它的两个值就分别代表"右上"和"左下"。

    再定义一个变量k来负责控制遍历方向的变化,一旦发生上面所说临界情况中的一种,就改变遍历方向。

    解决代码:

    
    class Solution {
        public int[] findDiagonalOrder(int[][] matrix) {
            if(matrix == null || matrix.length == 0) {
                return new int[]{};
            }
            
            int rowNum = matrix.length;
            int colNum = matrix[0].length;
            int[] arr = new int[rowNum * colNum];
            int[][] tran = {{-1, 1}, {1, -1}};
            int k = 0;
            int row = 0;
            int col = 0;
            for(int i = 0; i < arr.length; i++) {
                arr[i] = matrix[row][col];
                row += tran[k][0];
                col += tran[k][1];
    
                // 临界情况
                if(row > rowNum - 1) {
                    row = rowNum - 1;
                    col += 2;     // 在进入该代码块之前col已经减去了1,所以为了达到col+1的效果,我们需要将col加2
                    k = 1 - k;    // 变化遍历方向
                }
    
                if(col > colNum - 1) {
                    col = colNum - 1;
                    row += 2;    // 在进入该代码块之前row已经减去了1,所以为了达到row+1的效果,我们需要将row加2
                    k = 1 - k;
                }
    
                if(row < 0) {
                    row = 0;
                    k = 1 - k;
                }
    
                if(col < 0) {
                    col = 0;
                    k = 1 - k;
                }
            }
            return arr;
        }
    }
    
    
  • 相关阅读:
    不定义JQuery插件,不要说会JQuery
    .net深入体验与实战精要--ASP.NET开发大杂烩(转)
    iis7/7.5设置上传文件最大大小
    javascript禁止复制网页内容,兼容三大浏览器
    如何将控制台程序包装成windows服务
    Js获取当前日期时间及其它操作
    JS控制图片拖动 放大 缩小 旋转 支持滚轮放大缩小 IE有效
    js实用功能
    zen-Coding的使用
    使用 MyEclipse远程调试 Java 应用程序
  • 原文地址:https://www.cnblogs.com/syhyfh/p/12699447.html
Copyright © 2011-2022 走看看