LeetCode:对角线遍历【498】
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】的更多相关文章
- 498. (leetcode)对角线遍历
498. 对角线遍历 根据题目的图像看,主要有两种走法,第一种是向右上(顺时针方向),第二种是向左下(逆时针)走 我们设 x ,y初始为0,分别对应横纵坐标 现在分析右上(0,2) 为例:(注意右上的 ...
- leetcode 对角线遍历 JavaScript
JavaScript /** * @param {number[][]} matrix * @return {number[]} */ var findDiagonalOrder = function ...
- Java实现 LeetCode 498 对角线遍历
498. 对角线遍历 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ 1, 2, 3 ], [ ...
- Leetcode 498.对角线遍历
对角线遍历 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ 1, 2, 3 ], [ 4, 5, ...
- Leetcode 498:对角线遍历Diagonal Traverse(python3、java)
对角线遍历 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. Given a matrix of M x N elemen ...
- [LeetCode] Diagonal Traverse 对角线遍历
Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal ...
- [Swift]LeetCode498. 对角线遍历 | Diagonal Traverse
Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal ...
- LeetCode498 对角线遍历
给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], ...
- python(leetcode)498. 对角线遍历
这题难度中等,记录下思路 第一个会超时, 第二个:思想是按斜对角线行进行右下左上交替遍历, def traverse(matrix): n=len(matrix)-1 m=len(matrix[0]) ...
随机推荐
- 李洪强经典面试题41-iOS选择题
1.及时聊天app不会采用的网络传输方式是 DA UDP B TCP C Http D FTP 2.下列技术不属于多线程的是 AA Block B NSThread C NSOperation D G ...
- eclipse + MinGW调试程序printf输出被buffer的问题
比如说一个 1. int x = 1;2. printf("xxx")3. int y = 2;调试的时候,运行第二行,但是控制台没有输出.必须调试到整个程序都结束的时候才会把所有 ...
- ajax请求后台返回map类型并如何展示
前台jsp或者ftl文件接收返回结果: <input type="hidden" name="selectedModelListStr" id=" ...
- Introdution to Spring Mobile
1. In Eclipse, create a new Maven Project using the spring-mvc-jpa-archetype. 2. Add the spring-mobi ...
- 如何利用Emacs进行个人时间管理(GTD)
1. 简介 1.1 什么是GTD Get Things Done(GTD),是一套时间管理方法,面对生活中如下情况: 有很多事情要做 每件事情有主次之分 个人精力有限 我们需要随时很方便的了解我们下一 ...
- 用关键字interface定义接口,通过关键字implements来实现接口
[定义]Java中,能够完成特定功能的,由若干属性和方法组织成的,相对独立的属性和方法的集合. [用途]实现类的多继承,以解决Java只能单继承,不支持多继承的问题. [特点] 用关键字interfa ...
- DBCP与C3P0数据库连接池
数据库连接池是做什么的? 学过计算机网络的都知道,在一个内部局域网中.大部分用的都是私有地址,要想和外部 打交道,必须要有相应的合法外部地址相相应.然而内部用户数量巨大.一台机子一个外部IP 是不现实 ...
- 慢慢理解RESTful架构
<理解本真的REST架构风格> 作者:李锟 链接:http://www.infoq.com/cn/articles/understanding-restful-style/ <理解R ...
- artDialog自定义弹框
弹框内容:<div class='boxy' style="display:none;" id="boxy"> //将div设置成隐藏效果 < ...
- 1280 前缀后缀集合(map)
1280 前缀后缀集合 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一个数组包含N个正整数,其中有些是重复的.一个前缀后缀集是满足 ...