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] 解释:

题目分析

  首先是两种变换,一种是X++,Y--,即向左下方移动。另一种是X--,Y++,即向右上方移动

  还有要考虑6中情况,

  

  右上方移动,会有三种出界情况,以及对应调整策略。左下方移动,同样会有三种出界情况,以及对应调整策略。需要说明的是题目给的是正方形矩阵,此处容易想当然忽略对角的情况

  具体的出界判断以及调整详见代码。PS:这道题真TMD的坑,平心静气的慢慢做!!!

Java题解

package arr;

import java.util.Scanner;

public class FindDiagonalOrder_498 {
public static int[] findDiagonalOrder(int[][] matrix) {
int flag =1;
int x =0;
int y=0;
int m = matrix.length;
if(m==0)
return new int[]{};
int n = matrix[0].length; int[] res = new int[m*n];
for(int i=0;i<m*n;i++)
{
res[i] = matrix[x][y];
if(flag==1)
{
//右上角【纵坐标超了,横坐标小于0】
if(x-1<0&&y+1>n-1)
{
x++;
flag=0;
continue;
}
//上面【纵坐标没超,但是横坐标小于0】
if((x-1<0&&y+1<=n-1))
{
y++;
flag =0;
continue;
}
//右面【横坐标大于0,纵坐标超了】
if(x-1>=0&&y+1>n-1)
{
x++;
flag = 0;
continue;
}
x--;y++;
}
else{
//左下角【横坐标超过,纵坐标小于0】
if(x+1>m-1&&y-1<0)
{
y++;
flag=1;
continue;
}
//下面【横坐标超了,但是纵坐标没超】
if(x+1>m-1&&y-1>=0)
{
y++;
flag =1;
continue;
}
//左面【横坐标没超,但是纵坐标小于0】
if(x+1<=m-1&&y-1<0)
{
x++;
flag =1;
continue;
}
x++;y--;
}
}
return res;
} public static void main(String[] args) {
int[][] matrix = new int[][]{{1,2,3},{4,5,6}};
findDiagonalOrder(matrix);
}
}

  

LeetCode:对角线遍历【498】的更多相关文章

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

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

  2. leetcode 对角线遍历 JavaScript

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

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

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

  4. Leetcode 498.对角线遍历

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

  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. python(leetcode)498. 对角线遍历

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

随机推荐

  1. 344. Reverse String【easy】

    344. Reverse String[easy] Write a function that takes a string as input and returns the string rever ...

  2. gsub函数

    gsub(r, s [, t])    For each substring matching the regular expression r in the string t, substitute ...

  3. [转]sql语句优化原则

    性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化. 为了获得稳定的执行性能,SQL语句越简单越好.对复杂的SQL语句,要设 ...

  4. java & c sharp 的关联

    第一.java是真正的与平台无关,c sharp不是,他只是口头上的与平台无关,最后,却要靠别人来实现非微软平台的类库. 第二.java中的类名.class 和c#的 typeof(类名)或者getT ...

  5. springboot解决第三方依赖jar包的问题

    公司现在用的是springboot+maven,想要把一些老的项目都改成这种框架.但是一些老的项目中有好多第三方的jar包或者是自己的jar包,maven库上没有.最初的解决方案是一个个的deploy ...

  6. 【ASP.NET】——AdRotator控件

    AdRotator控件即广告控件. 广告,是站点不可缺少的一部分.也是站点获取收益的最主要途径,但最初制作广告非常麻烦.asp.net就将该方法封装成了一个控件.为我们节省了非常多时间.这也是ASP. ...

  7. 【转】Android自动化测试(UiAutomator)简要介绍

    一.一个BUG引发的问题   如果研发过程中有一个BUG:“不断的切换手机语言出现花屏现象”.这个问题我们如何验证呢?我想,最好的方式应该是自动化测试.    那么,自动化测试可以完成哪些任务呢?  ...

  8. 模式识别之概率分布---平均分布,正态分布,一阶滑动和,一阶线性回归 C语言编程

    http://wenku.baidu.com/view/11cb1669a98271fe910ef9c6.html

  9. echarts Y轴刻度保留几位小数

    yAxis: [ { type: 'value', name: '雨量(mm)', nameLocation: 'start', inverse: true, axisLabel: {         ...

  10. 发现保存GIF格式后相素发生变化咋办

    数学公式编辑器MathType主要的作用就是编辑公式用的,一些用户朋友编辑完公式希望把公式保存为“高分辨率”的GIF格式,但是在图片查看器中进行浏览查看时发现GIF的分辨率发生了变化,对于这种情况该如 ...