• 对角线遍历


    题目:对角线遍历

    问题描述:

    给定一个含有 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;
        }
    }
    
    
  • 相关阅读:
    csu 1513 Kick the ball! 搜索
    训练赛bug总结
    csu 1780 简单的图论问题? 搜索
    贪吃蛇
    hdu 1541 Stars 树状数组
    FZU 2092 收集水晶 BFS记忆化搜索
    [ An Ac a Day ^_^ ] UVALive 2035 The Monocycle BFS
    52. N皇后 II
    修改全局变量-global 修改外部嵌套函数中的变量 nonlocal
    安装glove 不报错
  • 原文地址:https://www.cnblogs.com/syhyfh/p/12699447.html
Copyright © 2020-2023  润新知