查询两个正整数范围内的回文数(对称数) | 算法从菜鸟开始
发布时间:2022-10-18 14:37:51 396
相关标签: # 前端# typescript
一、上题目
返回两个正整数范围内的回文数(对称数),如1-10000之间的所有回文数(对称数)。
何为回文数,即是对称的数字,如个位数1、2、3,或者是11、22、33、121这样的。
二、分析
从题目中分析是相当于将指定范围内的数遍历一遍,然后依次判断是否是回文数,重点就在如何判断一个数是回文数。
回文数具备对称的特点,如果将回文数翻转之后还相等,那这个数就是回文数。
三、方案一:利用split、reverse、join方法
功能测试:
OK,没啥问题~
算法时间复杂度:
外层for循环,复杂度为,内部执行s.split('').reverse().join('')
,这几个函数的时间复杂度是不确定的,但是考虑字符串分割、翻转所有元素、拼接元素,总是要大于时间复杂度的。
所以整体上的时间复杂度要 > 。
方案二:字符串自身前后比较
换一种比较字符串是否是回文串的方法 - 字符串自身前后比较(双指针)
功能测试:
OK,没啥问题~
算法时间复杂度:
两层for循环,没啥说的,整体上的时间复杂度是。
方案三、反转整数
反转整数,也就是将数字还是反转成数字,不再进行字符串的转换。
我们来看下代码
功能测试:
也没啥问题~
算法时间复杂度:
两层循环,没啥说的,整体上的时间复杂度是。
三种方案性能对比
三种方案的时间复杂度大概都集中在上,那三种方案到底哪个更优呢?直接用事实说话!
以查询1-200W之间的所有回文数为例,进行性能测试
结果上图:
从结果上可以看出,
- 在方案一中使用
split
、reverse
、join
是比较消耗性能的,远不如方案二和方案三理想; - 方案二与方案三对比,后者略胜一筹,数字的处理在计算机中还是占优势的
综上所述,优先考虑使用方案三~
结语
以上就是胡哥今天给大家分享的内容,喜欢的小伙伴记得点赞
、收藏
呀,关注胡哥有话说,学习前端不迷路,欢迎多多留言交流...
文章来源: https://blog.51cto.com/huge/5761611
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报