【LeetCode】498.对角线遍历

无论何时何地,我都认为对于一道编程题,思考解法的时间用于是实际动手解决问题的2倍!如果敲键盘编码需要5min,那么思考解法的过程至少就需要10分钟。

1. 题目

在这里插入图片描述

2. 思想

其实这就是一道模拟题,难度中等。做这种题的关键就是需要:先把边界情况搞清楚,然后自己手动模拟一下是否能够正确输出。在这个基础上,再写代码。一定是先思考,思考清楚后,再动手编码。

知道这题是一道模拟题,那么该怎么写呢?观察图片,有如下几个特征:
(1)运动轨迹不是斜向往上,就是斜向往下。斜向向上的过程中典型的就是i=i-1,j=j+1;
(2)但是运动到什么时候就改变了运动轨迹了呢?这个地方需要分类讨论。

  • 运动轨迹是斜向上的时候:要么是i当前的值是0(表示是第一行,没法再往上了),要么是j的值是m-1(表示是最后一列,也没法再往上了)
  • 运动轨迹是斜向下的时候:要么是j的值为0(表示是第一列,没法再往下了),要么是i的值是n-1(表示是最后一行,也没法再往下了)
    在上述这两类下,需要改变运动轨迹。
    (3)但是还有一个问题,就是运动轨迹改变后,那么就需要同步修改一下坐标的位置了。这里我们可以设置一个change变量,用于判断是否需要变换位置。change的作用是在如下绿色指针的地方:
    在这里插入图片描述

把上面三个特征进行编码,那么这题就解决了80%的问题了,还剩一部分细节需要处理。

剩下的细节是什么呢?也就是对应下面这个红框中的内容:

  • j=j+1的前提是j!=m-1
  • i=i+1的前提是i!=n-1
    在这里插入图片描述

3. 代码

class Solution:def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]:cnt = 0res = []i = 0j = 0up = 1 # 向上的标志n = len(mat)m = len(mat[0])# 列while(cnt < m*n):print(i,j, mat[i][j],", up = ", up)res.append(mat[i][j])# 判断接下来的方向if (up == 1 and i == 0) or (up == 1 and j == m-1):print("here,", i, j)change = 1if (up == 0 and j == 0) or (up == 0 and i == n-1):change = 1# 下一步的位置是特殊变动还是按照up来变动?if change: # 特殊变动# print("in change", i, j , "up=",up)if up == 1 and i == 0 and j!= m-1:j = j + 1up = 0elif up == 1 and j == m-1:# print("here")i = i + 1up = 0elif up == 0 and j == 0 and i != n-1:i = i + 1up = 1elif up == 0 and i == n-1:j = j + 1up = 1change = 0else: # 按照up变动# 如果是向上if up:i = i - 1j = j + 1else:i = i + 1j = j - 1# 切换upcnt += 1print(res)return res

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/33408.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

用 NotePad++ 运行 Java 程序

安装包 网盘链接 下载得到的安装包: 安装步骤 双击安装包开始安装. 安装完成: 配置编码 用 NotePad 写 Java 程序时, 需要设置编码. 在 设置, 首选项, 新建 中进行设置, 可以对每一个新建的文件起作用. 之前写的文件不起作用. 在文件名处右键, 可以快速打开 CMD 窗口, 且路…

使用 libssh2_session_set_timeout 设置 SSH 会话超时时间

使用 libssh2_session_set_timeout 设置 SSH 会话超时时间 函数原型参数说明返回值示例代码注意事项libssh2_session_set_timeout 是 libssh2 库中的一个函数,用于设置 SSH 会话的超时时间。这对于防止网络延迟或连接中断导致的长时间挂起非常有用。 函数原型 int libssh2_se…

如何用注册机破解Reflexive游戏

相信有许多小朋友&#xff08;像我以前一样&#xff09;已经迫不及待地准备准备对浩瀚的、像三星堆一般的Reflexive游戏合集进行考古挖掘工作了。不巧的是&#xff0c;打开游戏之后发现常常提示要付费才能解锁完整版。 一、下载注册机与破解文件 首先&#xff0c;在我的永硕网…

红外跟随避障模块详解

在智能车、机器人和自动化等领域避障技术是确保安全和高效运行的关键。红外避障模块作为一种常见的避障解决方案&#xff0c;因其非接触、响应速度快和抗干扰能力强等优点而备受青睐。本文将详细介绍红外避障模块的特点、工作原理、以及应用案例&#xff0c;帮助您更好地了解这…

【0x3D】HCI_Remote_Host_Supported_Features_Notification事件详解

目录 一、事件概述 二、事件格式及参数说明 2.1. HCI_Remote_Host_Supported_Features_Notification事件格式 2.2. BD_ADDR 2.3. Remote_Host_Supported_Features 三、事件作用 3.1. 设备特性沟通与理解 3.2. 功能协商与性能优化 3.3. 设备管理与配置更新 四、应用场…

开发中使用UML的流程_08 PIM-4:定义操作及方法

目录 1、序列图概述 2、序列图调用方式 3、创建消息与销毁消息 4、几项建议 1、序列图概述 在PIM-4中&#xff0c;系统分析员可以用序列图来表达&#xff0c;系统内部一群对象合力完成某一个系统用例时&#xff0c;执行期间的交互情形。之后&#xff0c;序列图可能通过设计…

Unity 设计模式-策略模式(Strategy Pattern)详解

策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;定义了一系列算法&#xff0c;并将每种算法封装到独立的类中&#xff0c;使得它们可以互相替换。策略模式让算法可以在不影响客户端的情况下独立变化&#xff0c;客户端通过与这些策略对象进…

空间异质性数据分析不再复杂:地理加权回归分析、主成分分析、判别分析、分位数回归分析、线性回归等

目录 专题一 地理加权回归下的描述性统计学 专题二 地理加权主成分分析 专题三 地理加权回归 专题四 高级回归与回归之外 更多了解 在自然和社会科学领域有大量与地理或空间有关的数据&#xff0c;这一类数据一般具有严重的空间异质性&#xff0c;而通常的统计学方法并不能…

【spring mvc】全局处理请求体和响应体

目录 说明实现效果逻辑图 实现步骤创建公共处理的请求和响应的类api接口测试前端请求响应结果 扩展Response响应格式实体ResponseCode 响应状态码RSA工具类 RequestBodyAdvice 介绍使用场景 ResponseBodyAdvice 介绍使用场景 说明 由于项目中需要进行加密传输数据提高项目安全…

【计算机网络】实验8:聚合了不存在的网络导致的路由环路问题

实验 8&#xff1a;聚合了不存在的网络导致的路由环路问题 一、 实验目的 聚合了不存在的网络导致的路由环路问题。 网络故障导致的路由环路问题。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、聚合了不存在的网络导致的路由环路问题 (1) 第一步&am…

【Leetcode】189.轮转数组

题目链接&#xff1a; 189.轮转数组 题目描述&#xff1a; 解题思路&#xff1a; 要想实现数组元素向右轮转k个位置&#xff0c;可是将数组三次反转来实现 以 nums [1,2,3,4,5,6,7], k 3 为例&#xff0c;最终要得到[5,6,7,1,2,3,4]: 第一次反转&#xff1a;将整个数组反转…

设计模式c++(二)

文章目录 十三、门面模式_Facade十四、代理模式_Proxy十五、适配器_Adapter十六、中介者_Mediator十七、状态模式_State十八、备忘录_Memento十九、组合模式_Composite二十、迭代器_Iterator二十一、职责链_Chain Of Resposibility二十二、命令模式_Command二十三、访问器_Vist…

shell 3 脚本参数传递与数字运算(泷羽sec)

声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章。 笔记只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 这节课旨在扩大自己在网络安全方面的知识面&#xff0c;了解网络安全领域的见闻&#xff0c;了…

jvm优化策略都有哪些

1. 堆内存&#xff08;Heap Memory&#xff09;优化&#xff1a; • 调整堆大小&#xff1a;通过-Xms和-Xmx参数设置JVM初始堆大小和最大堆大小&#xff0c;以确保JVM在启动时拥有足够的内存&#xff0c;并在需要时能够扩展到最大容量。 • 堆分区调整&#xff1a;调整年轻代&a…

使用ensp搭建内外互通,使用路由跨不同vlan通信。

1.网络拓扑图 2.规则 &#xff08;1&#xff09;允许 &#xff08;自己&#xff09;ping通内外网&#xff0c;内外网随便一个pc就可以. &#xff08;2&#xff09; 允许&#xff08;电信&#xff09;ping通内外网&#xff0c;内外网随便一个pc就可以 &#xff08;时间问题不做…

Flink 中维表 Join 的实现方式与优化策略

目录 一、维表介绍 二、预加载维表 &#xff08;一&#xff09;实现方式 &#xff08;二&#xff09;优缺点 &#xff08;三&#xff09;改进尝试与局限 三、使用本地缓存&#xff08;HashMap&#xff09;加载维表 &#xff08;一&#xff09;实现方式 第一版 第二版 …

详解八大排序(六)------(三路划分,自省排序,归并排序外排序)

文章目录 1. 快排之三路划分1. 1 三路划分的诞生由来1. 2 三路划分的具体思路1. 3 代码实现 2. 快排之自省排序2. 1 自省排序的目的2. 2 自省排序的思路2. 3 自省排序的实现代码 3. 归并排序外排序3. 1 外排序介绍3. 2 归并排序外排序的思路3. 3 归并排序的实现代码 1. 快排之三…

【Redis篇】 List 列表

在 Redis 中&#xff0c;List 是一种非常常见的数据类型&#xff0c;用于表示一个有序的字符串集合。与传统的链表结构类似&#xff0c;Redis 的 List 支持在两端进行高效的插入和删除操作&#xff0c;因此非常适合实现队列&#xff08;Queue&#xff09;和栈&#xff08;Stack…

计算机视觉——相机标定(Camera Calibration)

文章目录 1. 简介2. 原理3. 相机模型3.1 四大坐标系3.2 坐标系间的转换关系3.2.1 世界坐标系到相机坐标系3.2.2 相机坐标系到图像坐标系3.2.3 像素坐标系转换为图像坐标系3.2.4 世界坐标转换为像素坐标 3.3 畸变3.3.1 畸变类型3.3.1.1 径向畸变&#xff08;Radial Distortion&a…

【C++】刷题强训(day12)--删除公共字符、两个链表的第一个公共节点、mari和shiny

目录 1、删除公共字符 1.2 思路 1.3 代码实现 2、两个链表的公共节点 2.1 题目 2.2 思路 2.3 代码实现 方法一&#xff1a;对齐 方法二&#xff1a;公共端点法 3、mari和shiny 3.1 题目 3.2 思路 3.3 代码实现 刷题汇总&#xff1a;传送门&#xff01; 1、删除公共…