回文的范围——算法面试刷题2(for google),考察前缀和
如果一个正整数的十进制表示(没有前导零)是一个回文字符串(一个前后读取相同的字符串),那么它就是回文。例如,数字5
, 77
, 363
, 4884
, 11111
, 12121
和349943
都是回文。
如果一个整数范围包含偶数个回文,那么它就是一个有趣的范围。范围 [L, R]
且L <= R
的定义为从L
到R
(包括):(L, L+1, L+2,……,R-1, R)的整数序列。L
和R
是这个范围的第一个和最后一个数字。
如果L
<=L1
<= R1
<=R1
> =R
,那么范围[L1, R1]
就是[L, R]
的子集合。你的工作是确定有多少有趣的[L, R]
子集。
- 数据保证结果在int范围,不会溢出
您在真实的面试中是否遇到过这个题?
样例
样例 1:
输入 : L = 1, R = 2
输出 : 1
样例 2:
输入 : L = 1, R = 7
输出 : 12
样例 3:
输入 : L = 87, R = 88
输出 : 1
我的解法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class Solution: """ @param L: A positive integer @param R: A positive integer @return: the number of interesting subranges of [L,R] """ def PalindromicRanges( self , L, R): # test ans = 0 dp = [ 0 ] * (R - L + 2 ) for i in range (L, R + 1 ): if self .is_palindrom( str (i)): dp[i - L + 1 ] = dp[i - L] + 1 else : dp[i - L + 1 ] = dp[i - L] for i in range (L, R + 1 ): for j in range (i, R + 1 ): if (dp[j - L + 1 ] - dp[i - L]) % 2 = = 0 : ans + = 1 return ans def is_palindrom( self , s): i, j = 0 , len (s) - 1 while i < j: if s[i] ! = s[j]: return False i + = 1 j - = 1 return True |
参考代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | class Solution: """ @param L: A positive integer @param R: A positive integer @return: the number of interesting subranges of [L,R] """ def PalindromicRanges( self , L, R): # test count = 0 len = R - L + 2 record = [ 0 ] * len for offset in range ( len - 1 ): record[offset + 1 ] = record[offset] if self .IsPalindromic(L + offset): record[offset + 1 ] + = 1 for left in range ( 0 , len - 1 ): for right in range (left + 1 , len ): temp = record[right] - record[left] if temp % 2 = = 0 : count + = 1 return count def IsPalindromic( self , number): str_ = str (number) start, end = 0 , len (str_) - 1 while start < end: if str_[start] = = str_[end]: start + = 1 end - = 1 else : return False return True |
值得学习的地方:L + offset的处理,比我写得优雅。
标签:
算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2017-04-19 赴美生子怀孕前和怀孕后保险——备孕前2年可以买备孕险,怀孕生产意外或者孩子意外可以买孕中险
2017-04-19 美国诚实签经验——我准备了家庭预算表 和 保险,麻烦您看下,谢谢
2017-04-19 美国诚实签经验——不要插队
2017-04-19 美国诚实签经验——回答签证官的问题时,一定要问什么才答什么,不要犹豫改口、做很多解释或开玩笑,自信且镇静地与他对话,着装得体、举止自然、言谈自信
2017-04-19 美国诚实签经验——IMG全球医疗险,TODO
2017-04-19 美国诚实签经验——要观察面试官,能识人,找友好的面试官
2017-04-19 美国诚实签经验——不要抢答,两个人一起签,要让与社会交流多、表达能力强的人为主导,抓住问题核心回答,重要问题回答时补充材料