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. UVa 400 Unix Is命令

    简单题 #include <bits/stdc++.h> using namespace std; const int maxn=110; string s[maxn]; int main ...

  2. TOMCAT中文信息乱码改为GBK

    # Licensed to the Apache Software Foundation (ASF) under one or more# contributor license agreements ...

  3. WCF全面解析之 第四讲 使用代码 部署服务

    关键代码: ServiceHost host = null; //启动 private void button1_Click(object sender, EventArgs e) { host=ne ...

  4. VBA 学习笔记 - 输入框

    学习资料 https://www.yiibai.com/vba/vba_input_box.html 输入框 InputBox 函数说明 提示用户输入值.当输入值后,如果用户单击确定 按钮或按下键盘上 ...

  5. .NET Core快速入门教程 3、使用VS Code开发.NET Core控制台应用程序

    一.前言 本篇开发环境 1.操作系统: Windows 10 X642.SDK: .NET Core 2.0 Preview3.VS Code:1.14 二.安装&配置 1.VS Code下载 ...

  6. python opencv:色彩空间

    RGB色彩空间 常见的色彩空间 色彩空间的转换 cv2.cvtColor(image, 转换选项) 常见的两个颜色转换 HSV与RGB YUV与RGB inRange方法 函数参数: 第一个参数:是原 ...

  7. JS利用HTML5的Web Worker实现多线程

    需求:有一个长时间的斐波拉契的计算希望放在分线程中计算,计算的得到结果后再返回给主线程展示,再计算的时候不冻结页面 var number = 55;//传入分线程的参数 var worker = ne ...

  8. 整个DIV 块垂直居中

    <!-- 垂直居中一定要有确定大小的 父容器(根) html,body 一般100% --> <!DOCTYPE html> <html lang="en&qu ...

  9. 如何在JSP页面里面显示xml格式的数据

    正常情况下,在jsp页面里的标签里写xml格式的数据,在浏览器里面的页面里显示出来的是乱码. 为什么会显示乱码呢?原来xml标签在jsp里会被解析为浏览器对象,因为xml最开始被设计出来是 为了写网页 ...

  10. 牛客跨年AK场-小sum的假期安排

    链接:https://ac.nowcoder.com/acm/contest/3800/G来源:牛客网 题目描述 小 sun 非常喜欢放假,尤其是那种连在一起的长假,在放假的时候小 sun 会感到快乐 ...