算法采用 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)。

回文链表

回文链表和回文数非常相似,只不过链表是套了一个壳子。所以我们可以考虑把链表中的值先提取出来,然后再像回文数那样判断提取出来的数是否对称。

节点的结构:有 valnext 两个属性,val 是节点存储的值,next 是指向下一个节点的指针。

export class ListNode {constructor(public val: number, public next: ListNode | null) {}
}

回文链表有几个边界条件:

  1. head 节点,也就是链表的第一个节点就是 null,则判断是回文链表
  2. head.next 也就是第二个节点为 null,表示只有 head 节点,这也是一个回文链表。
  3. 正常情况,遍历完链表所有节点的值,判断是不是符合回文数对称的特性。
// 先将链表数据提取出来成为数组,然后判断数组是不是回文数组
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 - 回文数和回文链表相关推荐

  1. access中判断回文的代码_LeetCode 第九题 回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数.示例 1: 输入: 121 输出: true示例 2: 输入: -121 输出: false 解释: 从左向右读 ...

  2. 中判断字符串是否为空_自己动手编写VBA代码,判断一个工作表是否为空,然后删除它...

    大家好,我们今日继续讲解VBA代码解决方案的第57讲内容:判断工作表是否为空表.在实际的工作中,我们要常常判断某个工作表是否为空的,那么在VBA中是如何能做到这一点呢? VBA中没有专门的属性或函数可 ...

  3. js导出excel单元格内换行符代码_前端和excel的那些事

    前端和 excel 的那点事 在开发需求中,经常会遇到需要和excel相关的需求,毕竟不是所有人都是程序员,很多的业务都是通过excel去进行数据的整理归类计算的,excel中提供的一系列快捷功能,统 ...

  4. 多机器人路径规划的代码_知荐 | 地平线机器人算法工程师总结六大路径规划算法...

    来源 | 知乎 知圈 | 进"高精度地图社群",请加微信15221054164,备注地图 目录 1 自主机器人近距离操作运动规划体系········1.1 单个自主机器人的规划体系 ...

  5. opencv自然背景下交通标志形状分类c++代码_前端革命时刻:前端代码是怎样智能生成的-图像分离篇

    作为阿里经济体前端委员会四大技术方向之一,前端智能化项目经历了 2019 双十一的阶段性考验,交出了不错的答卷,天猫淘宝双十一会场新增模块 79.34% 的线上代码由前端智能化项目自动生成.在此期间研 ...

  6. mooc数据结构与算法python版期末测验_中国大学数据结构与算法Python版答案_MOOC慕课章节期末答案...

    中国大学数据结构与算法Python版答案_MOOC慕课章节期末答案 更多相关问题 java.lang 包的 Character 类的 isJavaIdentifierStart 方法的功能是用来判断某 ...

  7. 回滚master代码_[转]Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)...

    两种情况(场景) 情况一 代码还只在本地,未push到运程仓库,想把代码还原到上一次commit的代码,此时操作为代码撤销 解决方案: 情况二 代码已经push到运程仓库,想把代码还原到上一次提交,此 ...

  8. 如何在vs中创建r树索引代码_线段树详解与实现

    此篇文章用于记录<玩转数据结构>课程的学习笔记 什么是线段树 线段树也被称为区间树,英文名为Segment Tree或者Interval tree,是一种高级的数据结构.这种数据结构更多出 ...

  9. python中的pygame弹球游戏代码_【pygame系列 第三课 弹球游戏-上 】

    python我们可以做文字版的游戏,比如猜数字游戏,21点游戏.那python可以做图形界面的游戏吗?偷偷告诉你,用pygame库就可以实现了.pygame是python中专门用来编写游戏的一个引擎库 ...

最新文章

  1. css sprites之圆角
  2. 网络数据采集与python爬虫_高校邦网络数据采集与Python爬虫答案
  3. Cisco路由器的口令恢復
  4. Playmaker Input篇教程之PlayMaker菜单概述
  5. 自定义logback触发器策略进行日志滚动
  6. font和lineheight冲突。
  7. 『重构--改善既有代码的设计』读书笔记----Split Temporary Variable
  8. springboot中使用缓存shiro-ehcache
  9. 【拉普拉斯机制代码实现demo】差分隐私代码实现系列(四)
  10. 什么是证书透明度(Certificate Transparency)?
  11. 新手可以借助Profiler学习TSQL
  12. Android问题-selection contains a component,button7,introduced in an ancestor and cannot be deleted....
  13. 首个官方气象数据集公开,已训练出20多个“青出于蓝”的AI
  14. 渴望整成“卡戴珊” 澳大利亚年轻女性以整容为荣
  15. dom4j解析XML文件(4)—实战
  16. java准确读取word文件页数
  17. 【Domoticz】玩转Domoticz平台——配合ESPEasy固件,开个头,以后玩起来起来再更新博客
  18. 使用samtools来对sam/bam/cram相互转换
  19. 如何使用Nacos实现配置热更新
  20. Fisher线性判别

热门文章

  1. 【报告分享】抖音-2019年下半年短视频平台营销通案.pdf
  2. 问题:anaconda: command not found 解决方案
  3. Python实战从入门到精通第三讲——数据结构与算法1之解压序列赋值
  4. 决赛来袭!十强战队齐聚,终极一战拉开帷幕!
  5. 业界分享 | Embedding技术在商业搜索与推荐场景的实践
  6. mysql删除表崩溃_MySQL在删除表时I/O错误原因分析
  7. 机器学习中的范数规则化之L21范数
  8. 蓝桥杯 算法训练 安慰奶牛
  9. 使用Timer的缺陷
  10. TP5项目lnmp环境500错误