498. (leetcode)对角线遍历
498. 对角线遍历
根据题目的图像看,主要有两种走法,第一种是向右上(顺时针方向),第二种是向左下(逆时针)走
我们设 x ,y初始为0,分别对应横纵坐标
现在分析右上(0,2) 为例:(注意右上的判断方向是顺时针 右上-->右-->下)
先判断是否可以右上 (5-->3),可以右上,则移动,并且下一个坐标继续判断是否可以右上
不可以右上,则判断是否可以向右(1-->2),可以向右,则移动,并且下一个坐标需要换方向(左下)
不可向右,再判断是否可以向下 (3-->6),可以向下,则移动,并且下一个坐标需要换方向(左下)
现在分析左下上(2,1) 为例:(注意左下的判断方向是逆时针,左下-->下-->右)
- 先判断是否可以左下 (2-->4),可以左下,则移动,并且下一个坐标继续判断是否可以左下
- 不可以左下,则判断是否可以向下(4-->7),可以向下,则移动,并且下一个坐标需要换方向(右上)
- 不可向下,再判断是否可以向右 (8-->9),可以向右,则移动,并且下一个坐标需要换方向(右上)
代码
class Solution { public static int[] findDiagonalOrder(int[][] matrix) {
if(matrix.length==0){
return new int[0];
} int row = matrix.length-1;//行
int col = matrix[0].length-1;//列
int len = (row+1)*(col+1);
int[] res = new int[len];//结果数组
int index = 0;//结果数组的存储下标 int x = 0;//对应row
int y = 0;//对应col
res[index] = matrix[x][y];
while(x!=row || y!= col){
//先右上
while (true) {
if(x==row && y== col){
break;
}
if (x - 1 >= 0 && y + 1 <= col) {
//可以右上
index++;
res[index] = matrix[--x][++y]; } else {
//不可以右上,看看能不能右移
if (y + 1 <= col) {
index++;
res[index] = matrix[x][++y];
break; }
//看看能不能下移
if (x+1 <= row) {
index++;
res[index] = matrix[++x][y];
break; } }
} while (true) {
if(x==row && y== col){
break;
} //再左下
if (y - 1 >= 0 && x + 1 <= row) {
//可以左下
index++;
res[index] = matrix[++x][--y]; } else {
//看看能不能下移
if (x+1 <= row) {
index++;
res[index] = matrix[++x][y];
break; }
//不可以左下,看看能不能右移
if (y + 1 <= col) {
index++;
res[index] = matrix[x][++y];
break;
}
}
} } return res; } }
498. (leetcode)对角线遍历的更多相关文章
- Leetcode 498:对角线遍历Diagonal Traverse(python3、java)
对角线遍历 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. Given a matrix of M x N elemen ...
- leetcode 对角线遍历 JavaScript
JavaScript /** * @param {number[][]} matrix * @return {number[]} */ var findDiagonalOrder = function ...
- LeetCode:对角线遍历【498】
LeetCode:对角线遍历[498] 题目描述 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ ...
- 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] 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]) ...
随机推荐
- 新手第一次在GitHub上提交代码完整教程
提交步骤: 1.创建github repository(仓库) 2.安装git客户端 3.为Github账户设置SSH key 4.上传本地项目到github 一.创建github repositor ...
- 文本编辑器EditPlus的安装
- streamsets 安装
这里有很多坑点 1. 我下载的是rpm 包,full 直接安装, 安装好后,路径在 /opt 目录 2. 启动 -注意报错 2.1 先给他创建 一个 日志目录, 安装好后是不存在这个目录 mk ...
- JDK8源码解析 -- HashMap(二)
在上一篇JDK8源码解析 -- HashMap(一)的博客中关于HashMap的重要知识点已经讲了差不多了,还有一些内容我会在今天这篇博客中说说,同时我也会把一些我不懂的问题抛出来,希望看到我这篇博客 ...
- Springboot学习:核心配置文件
核心配置文件介绍 SpringBoot使用一个全局配置文件,配置文件名是固定的 application.properties application.yml 配置文件的作用:修改SpringBoot自 ...
- socket 多连接
socket 多连接 本文档为文档https://www.cnblogs.com/wodeboke-y/p/11241472.html 后续内容. 上一文档中的案例2给出了一个阻塞型socket se ...
- N3K异常重启(案例)
在实际的情况下,有时候会遇到设备无故重启的问题,这个时候,我们需要判断一下重启的根本原因是什么,是否有规避的方法等. 这里记录了几个N3K异常重启的问题. 案例1: 设备型号:N3K-C3048TP- ...
- 结对编程任意Android App Demo
一.产品说明 1.编写目的:用于获取百度图标. 2.情景设计:本产品用于展示图标.随着21世纪各类元素的普及,大部分的人群想下载各类网站的图标,也为了方便用户更便捷的下载而开发的. 3.Demo主要实 ...
- idea中scala项目补全变量、添加打印语句的小技巧
1. 自动补全变量: new Person.var ,然后按回车键:效果:代码变成: val person: Person = new Person 2.添加打印语句: person.name.pr ...
- 导入jeesite 项目
1:从开源中国用git方式下载jeesite源码 链接https://gitee.com/thinkgem/jeesite gti 地址:https://gitee.com/thinkgem/j ...