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

    对角线遍历

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

       

    示例:

    输入:

    [

    [ 1, 2, 3 ],

    [ 4, 5, 6 ],

    [ 7, 8, 9 ]

    ]

    输出: [1,2,4,7,5,3,6,8,9]

    解释:

       

    说明:

    1. 给定矩阵中的元素总数不会超过 100000 。
       1 class Solution {
       2     public static int[] findDiagonalOrder(int[][] matrix) {
       3         if (matrix.length == 0 || matrix[0].length == 0) {
       4             return new int[0];
       5         }
       6         int m = matrix.length;
       7         int n = matrix[0].length;
       8         int[] order = new int[m * n];
       9         int row = 0;
      10         int col = 0;
      11         //存储方向改变值,右上,或者左下
      12         int[][] dirs = {{-1, 1}, {1, -1}};
      13         int k = 0;
      14         for (int i = 0; i < order.length; i++) {
      15             //将当前坐标赋值给新数组
      16             order[i] = matrix[row][col];
      17             //计算下一个点的坐标
      18             row += dirs[k][0];
      19             col += dirs[k][1];
      20             //根据边界条件,修正下一个点的坐标值.触碰边界,必然对方向取反
      21             // 右上方向碰到边界
      22             if (col > n - 1) {
      23                 col = n - 1;
      24                 row += 2;
      25                 //方向取反
      26                 k = 1 - k;
      27             }
      28             if (row < 0) {
      29                 row = 0;
      30                 k = 1 - k;
      31             }
      32             //左下方向碰到边界
      33             if (row > m - 1) {
      34                 row = m - 1;
      35                 col += 2;
      36                 k = 1 - k;
      37             }
      38             if (col < 0) {
      39                 col = 0;
      40                 k = 1 - k;
      41             }
      42         }
      43         return order;
      44     }
      45 }

    class Solution {
    public static int[] findDiagonalOrder(int[][] matrix) {
    if (matrix.length == 0 || matrix[0].length == 0) {
    return new int[0];
    }
    int m = matrix.length;
    int n = matrix[0].length;
    int[] order = new int[m * n];
    int row = 0;
    int col = 0;
    //存储方向改变值,右上,或者左下
    int[][] dirs = {{-1, 1}, {1, -1}};
    int k = 0;
    for (int i = 0; i < order.length; i++) {
    //将当前坐标赋值给新数组
    order[i] = matrix[row][col];
    //计算下一个点的坐标
    row += dirs[k][0];
    col += dirs[k][1];
    //根据边界条件,修正下一个点的坐标值.触碰边界,必然对方向取反
    // 右上方向碰到边界
    if (col > n - 1) {
    col = n - 1;
    row += 2;
    //方向取反
    k = 1 - k;
    }
    if (row < 0) {
    row = 0;
    k = 1 - k;
    }
    //左下方向碰到边界
    if (row > m - 1) {
    row = m - 1;
    col += 2;
    k = 1 - k;
    }
    if (col < 0) {
    col = 0;
    k = 1 - k;
    }
    }
    return order;
    }
    }

  • 相关阅读:
    appium连接真机时,报错:error: device unauthorized.
    python使用163邮箱发送测试报告遇到smtplib.SMTPAuthenticationError: (550, b'User has no permission')问题
    logging日志重复打印问题
    python实现text/html的get请求
    python实现Post请求四种请求体
    selenium异常类
    unittest所有断言方法
    windows下Jenkins+webdriver无法启动浏览器
    python3+selenium3之 解决:'chromedriver' executable needs to be in PATH问题
    python学习(6)--logging打印日志
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10372508.html
Copyright © 2011-2022 走看看