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;
    }
    }

  • 相关阅读:
    I.MX6 Manufacturing Tool V2 (MFGTool2) ucl2.xml hacking
    I.MX6 Manufacturing Tool V2 (MFGTool2) Update Command List (UCL) User Guide translate
    I.MX6 Manufacturing Tool V2 (MFGTool2) Emmc mksdcard-android.sh hacking
    I.MX6 Manufacturing Tool V2 (MFGTool2) Emmc mksdcard.sh hacking
    Eclipse中设置在创建新类时自动生成注释
    code
    Oracle的rownum原理和使用(整理几个达人的帖子)
    Catalog与Schema
    对于oracle监听器的配置
    64位WIN7+oracle11g+plsql安装
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10372508.html
Copyright © 2011-2022 走看看