LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表

题目一:

54. 螺旋矩阵icon-default.png?t=N6B9https://leetcode.cn/problems/spiral-matrix/

题目要求:

 思路:一定要先找好边界。如下图 ,上边界是1234,右边界是8、12,下边界是9、10、11,左边界是5,所以可以确定四个边界所包含的值。然后再循环一层一层往里进入,比如添加完上边界1234后,上边界就需要+1,即下沉到5678行,并与下边界做比较,如果下边界小于上边界,说明所有值都已经添加完毕了。

代码:

class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> list = new ArrayList<>();// 先拿到行数列数, 然后定义好四个边界int m = matrix.length;int n = matrix[0].length;int up = 0, down = m - 1, left = 0, right = n - 1;// 每次循环,列表list添加一个外层的数while (true){// 添加上边界的值,从左一直到最右边for (int i = left; i <= right; i++)list.add(matrix[up][i]);// 执行完毕后,将上边界下沉; 如果超过了下边界  说明都所有数都添加上了if (++up > down) break;// 添加右边界的值,从上到最下for (int i = up; i <= down; i++)list.add(matrix[i][right]);// 执行完毕后,将右边界左移; 如果小于左边界  说明都所有数都添加上了if (--right < left) break;// 添加下边界的值, 从右到最左for (int i = right; i >= left; i--)list.add(matrix[down][i]);// 执行完毕后,将下边界上移; 如果小于上边界  说明都所有数都添加上了if (--down < up) break;// 添加左边界的值, 从下到最上for (int i = down; i >= up; i--)list.add(matrix[i][left]);// 执行完毕后,将左边界右移; 如果大于右边界  说明都所有数都添加上了if (++left > right) break;}return list;}
}

注意:①注意for循环中,是要等于到达边界的,比如从左到右添加值时,一定是到达最右边

②添加了哪个边界的值,哪个边界就要向相反方向移动一次,而且必须是++或--先执行才有效

题目二:

234. 回文链表icon-default.png?t=N6B9https://leetcode.cn/problems/palindrome-linked-list/题目要求:

思路:直接对链表的值判断是否回文比较繁琐,可以先将链表的值复制到数组中,再使用双指针判断值是否回文。

代码:

class Solution {public boolean isPalindrome(ListNode head) {// 将链表的值复制到数组中List<Integer> vals = new ArrayList<Integer>();ListNode cur = head;while (cur != null){vals.add(cur.val);cur = cur.next;}// 双指针判断是否回文int l = 0;int r = vals.size() - 1;while (l < r){if (vals.get(l) != vals.get(r))return false;l++;r--;}return true;}
}

 题目三:

21. 合并两个有序链表icon-default.png?t=N6B9https://leetcode.cn/problems/merge-two-sorted-lists/题目要求:

 思路:递归。如果 l1 或者 l2 一开始就是空链表 ,那么没有任何操作需要合并,所以我们只需要返回非空链表。否则,我们要判断 l1 和 l2 哪一个链表的头节点的值更小,然后递归地决定下一个添加到结果里的节点。如果两个链表有一个为空,递归结束。

代码:

class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {if (list1 == null)return list2;else if (list2 == null)return list1;else if (list1.val < list2.val) {list1.next = mergeTwoLists(list1.next, list2);return list1;}else {list2.next = mergeTwoLists(list2.next, list1);return list2;}}
}

思路:也可以直接使用暴力解法。

代码:

class Solution {public ListNode mergeTwoLists(ListNode l1, ListNode l2) {ListNode prehead = new ListNode(-1);ListNode prev = prehead;while (l1 != null && l2 != null) {if (l1.val <= l2.val) {prev.next = l1;l1 = l1.next;} else {prev.next = l2;l2 = l2.next;}prev = prev.next;}// 合并后 l1 和 l2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可prev.next = l1 == null ? l2 : l1;return prehead.next;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

滑块验证码-接口返回base64数据

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言所需包图片示例使用方法提示前言 滑动验证码在实际爬虫开发过程中会遇到很多,不同网站返回的数据也是千奇百怪。这里分享一种接口返回base64格式的情况以及处理方式 所需包 opencv-python、…

vue3 路由缓存问题

目录 解决问题的思路&#xff1a; 解决问题的方案&#xff1a; 1、给roter-view添加key&#xff08;破坏复用机制&#xff0c;强制销毁重建&#xff09; 2、使用beforeRouteUpdate导航钩子 3、使用watch监听路由 vue3路由缓存&#xff1a;当用户从/users/johnny导航到/use…

比较杂的html元素

文章目录 abbrtimebqblockquotebrhrmetalink abbr 表示缩写 time 踢动给浏览器或搜索引擎阅读的事件&#xff1b;看着没什么效果 b 以前是一个无语义元素&#xff0c;主要用于加粗字体&#xff0c;有了css之后&#xff0c;加粗就不需要b元素了。 现在作为提醒注意&#xf…

C#判断字符串中有没有字母,正则表达式、IsLetter

要判断字符串中是否包含字母&#xff0c;可以使用正则表达式或者循环遍历字符串的方式。 方法一&#xff1a;使用正则表达式 using System.Text.RegularExpressions;string input "Hello123"; bool containsLetter Regex.IsMatch(input, "[a-zA-Z]");上…

【Java】Maven配置文件帮助文档(settings.xml 和 pom.xml)

文章目录 1. settings.xml1.1 localRepository1.2 interactiveMode1.3 offline1.4 pluginGroups1.5 proxies1.6 servers1.7 mirrors1.8 profiles1.9 activeProfiles 2. pom.xml2.1 本项目信息2.2 父项目信息2.3 prerequisites2.4 issueManagement2.5 ciManagement2.6 inception…

Linux网络编程:Socket套接字编程(Server服务器 Client客户端)

文章目录&#xff1a; 一&#xff1a;定义和流程分析 1.定义 2.流程分析 3.网络字节序 二&#xff1a;相关函数 IP地址转换函数inet_pton inet_ntop&#xff08;本地字节序 网络字节序&#xff09; socket函数(创建一个套接字) bind函数(给socket绑定一个服务器地址结…

Git概述

目录 一、什么是Git 二、什么是版本控制系统 三、Git和SVN对比 SVN集中式 SVN优缺点 Git分布式 Git优缺点 四、Git工作流程 四个工作区域 工作流程 五、Git下载与安装 一、什么是Git 很多人都知道&#xff0c;林纳斯托瓦兹在1991年创建了开源的Linux&#xff0c;从…

不是说嵌入式是风口吗,那为什么工作还那么难找?

最近确实有很多媒体、机构渲染嵌入式可以拿高薪&#xff0c;这在行业内也是事实&#xff0c;但前提是你有足够的竞争力&#xff0c;真的懂嵌入式。 时至今日&#xff0c;能做嵌入式程序开发的人其实相当常见&#xff0c;尤其是随着树莓派、Arduino等开发板的普及&#xff0c;甚…

[NLP] BERT模型参数量

一 BERT_Base 110M参数拆解 BERT_base模型的110M的参数具体是如何组成的呢&#xff0c;我们一起来计算一下&#xff1a; 刚好也能更深入地了解一下Transformer Encoder模型的架构细节。 借助transformers模块查看一下模型的架构&#xff1a; import torch from transformers …

Linux 线程库中的接口介绍

1.pthread_create()创建线程 pthread_create()的语法形式&#xff1a; 参数解释&#xff1a; 第一个参数thread&#xff1a;事先创建好的pthread_t类型的参数。成功时thread指向的内存单元被设置为新创建线程的线程ID。 第二个参数attr&#xff1a;用于定制各种不同的线程属性…

SQL Monitor Crack,PostgreSQL监控的传入复制图表

SQL Monitor Crack,PostgreSQL监控的传入复制图表  现在&#xff0c;您可以在从Estate页面导出的Microsoft Excel报告的摘要标题中看到UTC偏移量。 添加了PostgreSQL监控的传入复制图表。 Microsoft PowerShell API现在支持将使用New-SqlMonitorWindowsHost和New-SqlMonitorin…

QT-播放原始PCM音频流

QT multimedia audioplay.h /************************************************************************* 接口描述&#xff1a;原始音频播放类 拟制&#xff1a; 接口版本&#xff1a;V1.0 时间&#xff1a;20220922 说明&#xff1a; ********************************…

【二叉树】450. 删除二叉搜索树中的节点

450. 删除二叉搜索树中的节点 解题思路 搭建框架如果当前节点只有一个子节点 那么直接返回该节点拥有两个子节点 循环找到右边的最小值节点 也就是不断找左孩子 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* …

RN 之 TODO

调研&#xff1a; 好处&#xff1a; 前端技术栈&#xff0c;代码容易迁移 跨ios&#xff0c;安卓端&#xff0c;一次编写同时部署 坏处&#xff1a; 难于工程init/构建 antd难于集成&#xff0c;db难于集成&#xff0c;缺乏树控件 可能有功能无法实现&#xff0c;例如x/…

pythond assert 0 <= colx < X12_MAX_COLS AssertionError

python使用xlrd读取excel时&#xff0c;报错&#xff1a; assert 0 < colx < X12_MAX_COLS AssertionError 大意是excel列太多了。主要是xlrd库的问题。最好的方法是不用它&#xff0c;但是我用的其他人提供的工具用到它&#xff0c;没法改。 尝试手动删除excel的列&am…

【AI大模型】训练Al大模型

大模型超越AI 前言 洁洁的个人主页 我就问你有没有发挥&#xff01; 知行合一&#xff0c;志存高远。 目前所指的大模型&#xff0c;是“大规模深度学习模型”的简称&#xff0c;指具有大量参数和复杂结构的机器学习模型&#xff0c;可以处理大规模的数据和复杂的问题&#x…

MybatisPlus整合p6spy组件SQL分析

目录 p6spy java为什么需要 如何使用 其他配置 p6spy p6spy是一个开源项目&#xff0c;通常使用它来跟踪数据库操作&#xff0c;查看程序运行过程中执行的sql语句。 p6spy将应用的数据源给劫持了&#xff0c;应用操作数据库其实在调用p6spy的数据源&#xff0c;p6spy劫持到…

Unity框架学习--音频管理器

using System.Collections; using System.Collections.Generic; using UnityEngine;/// <summary> /// 音频管理器 /// </summary> public class AudioManager : SingletonMonoAutoBase1_DonDestoryOnLoad<AudioManager> {//各个声道的AudioSource组件AudioS…

c#实现依赖注入

当谈到C#中的依赖注入(Dependency Injection,DI)时,我们可以使用一个简单的示例来说明它是如何工作的。依赖注入是一种设计模式,用于将依赖关系从一个类传递到另一个类,以实现松耦合和可测试性。 假设我们有一个简单的订单处理应用程序,其中包含两个主要类:OrderServi…

音视频 ffplay命令-主要选项

选项说明-x width强制显示宽带-y height强制显示高度-video_size size帧尺寸 设置显示帧存储(WxH格式)&#xff0c;仅适用于类似原始YUV等没有包含帧大小(WxH)的视频-pixel_format format格式设置像素格式-fs以全屏模式启动-an禁用音频&#xff08;不播放声音&#xff09;-vn禁…