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]) ...
随机推荐
- Python模块学习之fabric
fabric是一个运维经常使用到的一个模块.但是我在python3环境下安装fabric就遇到了坑! 安装包名称是fabric3而不是fabric! pip install fabric3 利用fab ...
- java-ApiValueDemo
关于API相关正则表达式,各方法的使用 package com.example; import java.util.Arrays; import java.util.Scanner; /** * Ap ...
- CF 482A(Diverse Permutation-相邻距离不同数为k的1~n全排列构造)
A. Diverse Permutation time limit per test 1 second memory limit per test 256 megabytes input standa ...
- 解决pip安装模块报错Cannot fetch index base URL http://pypi.python.org/simple/
产生这个问题的原因呢和github一样,因为他们用的cdn被墙.经小伙伴反馈,解决办法如下. 通过指定国内镜像源来安装: pip --trusted-host 镜像源 install 模块名 -i 镜 ...
- Caffe模型读取
caffe模型最终保存使用过的protobuf形式,将一个已经训练好的caffe模型读取出来,可以参考如下: 1,包含的头文件: #include <google/protobuf/io/cod ...
- ios--后台返回信息有字符串和数字组成的,如何获取电话号码,让用户能够点击并且进行拨打?
-(void)callPhone:(NSString*)phoneNumber{ NSString *phoneStr=[NSString stringWithFormat:@"tel:// ...
- ios - UINavigationBar添加背景图片的几种简单思路
UITabBarController下面常常需要为多个ViewController设置导航栏样式,总结了一下遇到过的为UINavigationBar添加背景图片的几种简单思路 以设置背景图片为例: 第 ...
- nginx配置后只有根目录首页index.php能访问,其他页面404
只有首页面根目录可以访问,其他页面地址都是404 not found.网上找了半天url重定向,url重写都试了无效,要不就是重定向过多,下图为跳坑历程. location / { #if ($htt ...
- ProgressBar 进度条设置百分比显示
rawable/progressbar <layer-list xmlns:android="http://schemas.android.com/apk/res/android&qu ...
- Cocos2d-x Lua中实例:特效演示
下面我们通过一个实例介绍几个特效的使用,这个实例如下图所示,上图是一个操作菜单场景,选择菜单可以进入到下图动作场景,在下图动作场景中点击Go按钮可以执行我们选择的特性动作,点击Back按钮可以返回到菜 ...