对角线遍历

给定一个含有 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 。

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

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

Leetcode 498.对角线遍历的更多相关文章

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

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

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

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

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

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

  4. 498. (leetcode)对角线遍历

    498. 对角线遍历 根据题目的图像看,主要有两种走法,第一种是向右上(顺时针方向),第二种是向左下(逆时针)走 我们设 x ,y初始为0,分别对应横纵坐标 现在分析右上(0,2) 为例:(注意右上的 ...

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

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

  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. 498 Diagonal Traverse 对角线遍历

    详见:https://leetcode.com/problems/diagonal-traverse/description/ C++: class Solution { public: vector ...

随机推荐

  1. jQuery_2_常规选择器-进阶选择器

    进阶选择器: 1. 群组选择器     $("span,em,#box")   获取多个选择器的DOM对象 <div id="d1">div< ...

  2. LeetCode Nim Game (简单nim)

    题意: 有一堆石子,里面有n个石头,每次可以从中取出1~3个,两人轮流取,最后一个石子被谁取走即为赢家.你先取,问最后谁赢? 思路: n%4>0则先手赢,因为每次总是可以给对方留4个石子的倍数, ...

  3. 机器学习-octave使用

    1 == 2    % false 1 ~=2     % true % 隐藏版本,只显示>> . PS1('>> '); % 输出两位小数格式 disp(sprintf('2 ...

  4. IOS 自定义Layer(图层)

    方式1: @interface NJViewController () @end @implementation NJViewController - (void)viewDidLoad { [sup ...

  5. 3219: 求最高同学位置—C语言版

    3219: 求最高同学位置—C语言版 时间限制: 1 Sec  内存限制: 128 MB提交: 207  解决: 115[提交][状态][讨论版][命题人:smallgyy] 题目描述 设一维数组存放 ...

  6. .NET AJAX实例

    引用地址:http://blog.csdn.net/qianjiu/article/details/7524228 5.2 Ajax基础http://book.csdn.net/bookfiles/6 ...

  7. 委托、事件与Observer设计模式

    范例说明 上面的例子已不足以再进行下面的讲解了,我们来看一个新的范例,因为之前已经介绍了很多的内容,所以本节的进度会稍微快一些: 假设我们有个高档的热水器,我们给它通上电,当水温超过95度的时候:1. ...

  8. 统计学基于SPSS贾俊平 授课笔记 发布作业 spss19cn 软件下载地址及破解包spss19_10039 下载地址

    spss19cn软件下载地址及破解包spss19_10039 软件包下载地址一 http://www.33lc.com/soft/41991.html 软件包下载地址二 http://dl.pconl ...

  9. elasticsearch 7 安装

    elasticsearch 安装 操作系统:CentOS Linux release 7.4 elasticsearch:elasticsearch-7.1.1 es7+centos7 1.软件下载 ...

  10. vue系列之vue cli 3引入ts

    插件 Vue2.5+ Typescript 引入全面指南 vue-class-component强化 Vue 组件,使用 TypeScript/装饰器 增强 Vue 组件 vue-property-d ...