498. 对角线遍历

根据题目的图像看,主要有两种走法,第一种是向右上(顺时针方向),第二种是向左下(逆时针)走

我们设 x ,y初始为0,分别对应横纵坐标

  • 现在分析右上(0,2) 为例:(注意右上的判断方向是顺时针 右上-->右-->下)

    • 先判断是否可以右上 (5-->3),可以右上,则移动,并且下一个坐标继续判断是否可以右上

    • 不可以右上,则判断是否可以向右(1-->2),可以向右,则移动,并且下一个坐标需要换方向(左下)

    • 不可向右,再判断是否可以向下 (3-->6),可以向下,则移动,并且下一个坐标需要换方向(左下)

  • 现在分析左下上(2,1) 为例:(注意左下的判断方向是逆时针,左下-->下-->右)

    • 先判断是否可以左下 (2-->4),可以左下,则移动,并且下一个坐标继续判断是否可以左下
    • 不可以左下,则判断是否可以向下(4-->7),可以向下,则移动,并且下一个坐标需要换方向(右上)
    • 不可向下,再判断是否可以向右 (8-->9),可以向右,则移动,并且下一个坐标需要换方向(右上)

  • 代码

    class Solution {
    
        public static int[] findDiagonalOrder(int[][] matrix) {
    if(matrix.length==0){
    return new int[0];
    } int row = matrix.length-1;//行
    int col = matrix[0].length-1;//列
    int len = (row+1)*(col+1);
    int[] res = new int[len];//结果数组
    int index = 0;//结果数组的存储下标 int x = 0;//对应row
    int y = 0;//对应col
    res[index] = matrix[x][y];
    while(x!=row || y!= col){
    //先右上
    while (true) {
    if(x==row && y== col){
    break;
    }
    if (x - 1 >= 0 && y + 1 <= col) {
    //可以右上
    index++;
    res[index] = matrix[--x][++y]; } else {
    //不可以右上,看看能不能右移
    if (y + 1 <= col) {
    index++;
    res[index] = matrix[x][++y];
    break; }
    //看看能不能下移
    if (x+1 <= row) {
    index++;
    res[index] = matrix[++x][y];
    break; } }
    } while (true) {
    if(x==row && y== col){
    break;
    } //再左下
    if (y - 1 >= 0 && x + 1 <= row) {
    //可以左下
    index++;
    res[index] = matrix[++x][--y]; } else {
    //看看能不能下移
    if (x+1 <= row) {
    index++;
    res[index] = matrix[++x][y];
    break; }
    //不可以左下,看看能不能右移
    if (y + 1 <= col) {
    index++;
    res[index] = matrix[x][++y];
    break;
    }
    }
    } } return res; } }

498. (leetcode)对角线遍历的更多相关文章

  1. Leetcode 498:对角线遍历Diagonal Traverse(python3、java)

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

  2. leetcode 对角线遍历 JavaScript

    JavaScript /** * @param {number[][]} matrix * @return {number[]} */ var findDiagonalOrder = function ...

  3. LeetCode:对角线遍历【498】

    LeetCode:对角线遍历[498] 题目描述 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ ...

  4. Java实现 LeetCode 498 对角线遍历

    498. 对角线遍历 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ 1, 2, 3 ], [ ...

  5. Leetcode 498.对角线遍历

    对角线遍历 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ 1, 2, 3 ], [ 4, 5, ...

  6. [LeetCode] Diagonal Traverse 对角线遍历

    Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal ...

  7. [Swift]LeetCode498. 对角线遍历 | Diagonal Traverse

    Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal ...

  8. LeetCode498 对角线遍历

    给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], ...

  9. python(leetcode)498. 对角线遍历

    这题难度中等,记录下思路 第一个会超时, 第二个:思想是按斜对角线行进行右下左上交替遍历, def traverse(matrix): n=len(matrix)-1 m=len(matrix[0]) ...

随机推荐

  1. 关于pgsql 的json 和jsonb 的数据查询操作笔记整理

    关于pgsql 的json 和jsonb 的数据处理笔记 1. json 和jsonb 区别两者从用户操作的角度来说没有区别,区别主要是存储和读取的系统处理(预处理)和耗时方面有区别.json写入快, ...

  2. Truffle 快速构建 DApp

    简单介绍 官网传送门  Truffle是针对基于以太坊的Solidity语言的一套开发框架.本身基于Javascript,使用以太坊虚拟机(EVM)的世界一流的开发环境,用于区块链的测试框架和资产管道 ...

  3. RT_THREAD之组件学习

    CmBacktrace (Cortex Microcontroller Backtrace)是一款针对 ARM Cortex-M 系列 MCU 的错误代码自动追踪.定位,错误原因自动分析的开源库.支持 ...

  4. 基于Amoeba读写分离

    Amoeba 原理:amoeba相当于业务员,处理client的读写请求,并将读写请求分开处理.amoeba和master以及slave都有联系,如果是读的请求,amoeba就从slave读取信息反馈 ...

  5. 主机与虚拟机连接,主机能ping通虚拟机虚拟机ping不通主机问题

    事件描述: 从物理主机ping虚拟机时,能正常返回信息.反之,从虚机ping物理主机时返回信息:Destination Host unreachable.   解决方法: 首先,是因为默认创建的虚拟机 ...

  6. xshell 快捷键总结

    ##快捷键 linux tab == 命令补全,路径补全.如果tab不到,就代表对于当前用户环境系统找不到这个目录或者路径,有可能有,但是没有放在PATH中 ctrl + a == a:26个字母的第 ...

  7. Fizz Buzz in tensorflow

    code from keras.layers.normalization import BatchNormalization from keras.models import Sequential f ...

  8. 免费https/ssl通配证书(letsencrypt)安装

    教程:免费https/ssl通配证书(letsencrypt)安装 前置条件 开发443端口 关闭nginx .获取脚本 wget https://dl.eff.org/certbot-auto .执 ...

  9. CRS-1硬件维护

    一.CRS-1硬件介绍CRS-1 路由器是Cisco 推出的新的大容量骨干路由器,是一个支持多机箱扩展的路由系统.其设计容量可以扩展至72 个线卡机箱.8 个矩阵机箱,总交换容量达到92Tbps,具有 ...

  10. 使用docker构建第一个spring boot项目

    在看了一些简单的docker命令之后 打算自己尝试整合一下docker+spring boot项目本文是自己使用docker+spring boot 发布一个项目1.docker介绍 docke是提供 ...