access中判断回文的代码_前端也来点算法(TypeScript版) | 2 - 回文数和回文链表
算法采用 TS 进行编写。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。回文链表是链表节点的值和回文数有相同规律的链表。
”
回文数
这个数字可以看成是以中心对称分布的。最优的方案是尽量少的循环和使用空间,所以能不能想办法只循环 length / 2
次就可以判断出结果?显然是可以的,因为它具备对称性,所以排除边界条件之后,判断 str[i]
和 str[length - i - 1]
在 0 - length / 2
内是否一直相等就可确定是不是回文数。
TS 代码实现
export function isPalindrome1(x: number): boolean {// 排除小于0的边界条件if (x < 0) return false// 将数字转换成字符串,方便遍历const str = String(x)// 减少循环次数,只遍历一般的长度for (let i = 0; i < str.length / 2; i++) {// 如果遍历过程中有任何一个 `i` 与 `length - i - 1` 对应的值不相等,则一定可以确定不对称if (str[i] !== str[str.length - i - 1]) return false}// 遍历完都没有出现不等,则可以确定是回文数了return true
}
分析复杂度:由于要遍历 length / 2
次,所以时间复杂度是 O(n),没有消耗额外的空间,复杂度为 O(1)。
回文链表
回文链表和回文数非常相似,只不过链表是套了一个壳子。所以我们可以考虑把链表中的值先提取出来,然后再像回文数那样判断提取出来的数是否对称。
节点的结构:有 val
和 next
两个属性,val
是节点存储的值,next
是指向下一个节点的指针。
export class ListNode {constructor(public val: number, public next: ListNode | null) {}
}
回文链表有几个边界条件:
head
节点,也就是链表的第一个节点就是null
,则判断是回文链表head.next
也就是第二个节点为null
,表示只有head
节点,这也是一个回文链表。- 正常情况,遍历完链表所有节点的值,判断是不是符合回文数对称的特性。
// 先将链表数据提取出来成为数组,然后判断数组是不是回文数组
export function isPalindromeLinkedList(head: ListNode | null): boolean {// 两个边界条件,都属于是回文链表if (head === null || head.next === null) return true// arr 存储所有节点中的 valconst arr: number[] = []// 遍历链表时的临时节点let current: ListNode | null = head// 一直遍历链表, 用 current = current.next ,直到 current 不指向任何节点while (current) {// 把节点的值存到 arrarr.push(current.val)// 更换当前遍历的节点current = current.next}// 判断节点值得数组是否满足对称的特性for (let i = 0; i < arr.length / 2; i++) {if (arr[i] !== arr[arr.length - i - 1]) return false}// 遍历完成,没有不等的情况,判断是一个回文链表return true
}
复杂度分析:while 循环最坏的情况是 length 次,for 循环 length / 2 次,所以时间复杂度是 O(n),由于没有消耗额外的空间,空间复杂度是 O(1)。
用 TypeScript 写代码明显感觉错误率在减低,在写代码的阶段就会提示大部分书写错误,TypeScript 现在大势所趋,欢迎大家关注我,一起学习、进步!!!
算法系列文章 前端也来点算法(TS 版) 系列文章
欢迎大家关注我的掘金和公众号,算法、TypeScript、React 及其生态源码定期讲解。
access中判断回文的代码_前端也来点算法(TypeScript版) | 2 - 回文数和回文链表相关推荐
- access中判断回文的代码_LeetCode 第九题 回文数
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数.示例 1: 输入: 121 输出: true示例 2: 输入: -121 输出: false 解释: 从左向右读 ...
- 中判断字符串是否为空_自己动手编写VBA代码,判断一个工作表是否为空,然后删除它...
大家好,我们今日继续讲解VBA代码解决方案的第57讲内容:判断工作表是否为空表.在实际的工作中,我们要常常判断某个工作表是否为空的,那么在VBA中是如何能做到这一点呢? VBA中没有专门的属性或函数可 ...
- js导出excel单元格内换行符代码_前端和excel的那些事
前端和 excel 的那点事 在开发需求中,经常会遇到需要和excel相关的需求,毕竟不是所有人都是程序员,很多的业务都是通过excel去进行数据的整理归类计算的,excel中提供的一系列快捷功能,统 ...
- 多机器人路径规划的代码_知荐 | 地平线机器人算法工程师总结六大路径规划算法...
来源 | 知乎 知圈 | 进"高精度地图社群",请加微信15221054164,备注地图 目录 1 自主机器人近距离操作运动规划体系········1.1 单个自主机器人的规划体系 ...
- opencv自然背景下交通标志形状分类c++代码_前端革命时刻:前端代码是怎样智能生成的-图像分离篇
作为阿里经济体前端委员会四大技术方向之一,前端智能化项目经历了 2019 双十一的阶段性考验,交出了不错的答卷,天猫淘宝双十一会场新增模块 79.34% 的线上代码由前端智能化项目自动生成.在此期间研 ...
- mooc数据结构与算法python版期末测验_中国大学数据结构与算法Python版答案_MOOC慕课章节期末答案...
中国大学数据结构与算法Python版答案_MOOC慕课章节期末答案 更多相关问题 java.lang 包的 Character 类的 isJavaIdentifierStart 方法的功能是用来判断某 ...
- 回滚master代码_[转]Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)...
两种情况(场景) 情况一 代码还只在本地,未push到运程仓库,想把代码还原到上一次commit的代码,此时操作为代码撤销 解决方案: 情况二 代码已经push到运程仓库,想把代码还原到上一次提交,此 ...
- 如何在vs中创建r树索引代码_线段树详解与实现
此篇文章用于记录<玩转数据结构>课程的学习笔记 什么是线段树 线段树也被称为区间树,英文名为Segment Tree或者Interval tree,是一种高级的数据结构.这种数据结构更多出 ...
- python中的pygame弹球游戏代码_【pygame系列 第三课 弹球游戏-上 】
python我们可以做文字版的游戏,比如猜数字游戏,21点游戏.那python可以做图形界面的游戏吗?偷偷告诉你,用pygame库就可以实现了.pygame是python中专门用来编写游戏的一个引擎库 ...
最新文章
- css sprites之圆角
- 网络数据采集与python爬虫_高校邦网络数据采集与Python爬虫答案
- Cisco路由器的口令恢復
- Playmaker Input篇教程之PlayMaker菜单概述
- 自定义logback触发器策略进行日志滚动
- font和lineheight冲突。
- 『重构--改善既有代码的设计』读书笔记----Split Temporary Variable
- springboot中使用缓存shiro-ehcache
- 【拉普拉斯机制代码实现demo】差分隐私代码实现系列(四)
- 什么是证书透明度(Certificate Transparency)?
- 新手可以借助Profiler学习TSQL
- Android问题-selection contains a component,button7,introduced in an ancestor and cannot be deleted....
- 首个官方气象数据集公开,已训练出20多个“青出于蓝”的AI
- 渴望整成“卡戴珊” 澳大利亚年轻女性以整容为荣
- dom4j解析XML文件(4)—实战
- java准确读取word文件页数
- 【Domoticz】玩转Domoticz平台——配合ESPEasy固件,开个头,以后玩起来起来再更新博客
- 使用samtools来对sam/bam/cram相互转换
- 如何使用Nacos实现配置热更新
- Fisher线性判别