- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
题目地址:https://leetcode.com/problems/super-palindromes/description/
Let's say a positive integer is a superpalindrome if it is a palindrome, and it is also the square of a palindrome.
Now, given two positive integers L
and R
(represented as strings), return the number of superpalindromes in the inclusive range [L, R]
.
Example 1:
Input: L = "4", R = "1000" Output: 4 Explanation: 4, 9, 121, and 484 are superpalindromes. Note that 676 is not a superpalindrome: 26 * 26 = 676, but 26 is not a palindrome.
Note:
1、 1<=len(L)<=18
;
2、 1<=len(R)<=18
;
3、 L
andR
arestringsrepresentingintegersintherange[1,10^18)
.;
4、 int(L)<=int(R)
;
找出在[L, R]
双闭区间内,所有的超级回文数个数。超级回文数是指本身是回文数,并且它的算数平方根也是回文数。
暴力求解的话一定超时,很明显超级回文数是很稀少的,我们还是想想怎么能找规律吧。这是一些超级回文数:
# n, n^2
(1, 1)
(2, 4)
(3, 9)
(11, 121)
(22, 484)
(101, 10201)
(111, 12321)
(121, 14641)
(202, 40804)
(212, 44944)
(1001, 1002001)
(1111, 1234321)
(2002, 4008004)
可以注意到,在除了(1,4,9)之外的其他超级回文数的算数平方根都是有0,1,2组成,而且两头都是由1或者2构成。
所以可以想到BFS的解法,我们使用一个队列保存的是回文的算数平均数n,然后我们拿出队列的每个元素,像中间部分插入0,1,2作为候选的n(保证仍然是回文),然后把候选的n再次放入到队列中去,如果算数平均数n的平方大于R了,就不用拿他计算新的数字了。
最后还需要把1,2,3给放入到候选里面去,也要判断候选的回文算数平均数的平方是不是回文数,如果是的话,结果加一。
时间复杂度不会算,空间复杂度不会算.超过65%.
class Solution:
def superpalindromesInRange(self, L, R):
"""
:type L: str
:type R: str
:rtype: int
"""
que = collections.deque(["11", "22"])
candi = set()
while que:
size = len(que)
for _ in range(size):
p = que.popleft()
candi.add(p)
if int(p) ** 2 > int(R):
continue
for j in ["0", "1", "2"]:
q = (p[:len(p)//2] + j + p[len(p)//2:])
que.append(q)
candi.add("1")
candi.add("2")
candi.add("3")
res = 0
for cand in candi:
if int(L) <= int(cand) ** 2 <= int(R) and self.isPalindromes(int(cand) ** 2):
res += 1
return res
def isPalindromes(self, s):
s = str(s)
N = len(s)
for l in range(1, N // 2):
if s[l] != s[N - 1 - l]:
return False
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
https://leetcode.com/problems/super-palindromes/discuss/171450/Python-AC-bfs-detail-explanation
DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有
本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发
我正在解决这个问题 longest palindromic substring leetcode 上的问题,我遵循动态编程方法,创建了一个 n*n bool 表(我猜这也是此问题的标准解决方案)并成功
我是编程新手,所以请多多包涵。我目前正在研究函数逻辑。我正在尝试编写一个函数来查看传递的字符串是否为回文(真或假)。 这是我的代码, function palindrome(word){ if(w
题目地址:https://leetcode.com/problems/super-palindromes/description/ 题目描述 Let's say a positive intege
本文关键词:回文数,回文,题解,Leetcode, 力扣,Python, C++, Java 题目地址:https://leetcode.com/problems/palindrome-number
题目地址:https://leetcode.com/problems/palindrome-partitioning/description/ 题目描述 Given a string s, par
题目地址:https://leetcode.com/problems/valid-palindrome/description/ 题目描述 Given a string, determine if
题目地址:https://leetcode.com/problems/shortest-palindrome/description/ 题目描述 Given a string s, you are
题目地址:https://leetcode.com/problems/palindrome-pairs/description/ 题目描述 Given a list of unique words
题目地址:https://leetcode.com/problems/palindromic-substrings/description/ 题目描述 Given a string, your t
题目地址:https://leetcode.com/problems/longest-palindrome/open in new window Difficulty: Easy 题目描
该程序运行时不会引发任何异常,但无论输入如何,结果始终相同:““空白”是回文。”每次输入都是回文时,我只是想知道是否有人对为什么会发生这种情况有任何建议?下面是该程序的代码: class Palind
我是一名 Java 开发新手。我想用Java编写代码来计算段落中回文词的数量。 假设是:用户可以输入包含尽可能多的句子的段落。每个单词之间以空格分隔,每个句子之间以句点分隔,单词前后的标点符号将被忽略
我正在上一门编程入门类(class),通过 myProgrammingLab 将大量 Material 深入到我们的脑海中。我在递归的概念上遇到了一些麻烦……对我来说它有点被击中或错过了。这个特殊的问
#include using namespace std; void palindrome(char *s){ if (s[1] == 0) { return;
我的一般问题是如何弄清楚如何使用 DFS。这似乎是我知识的薄弱部分。我的想法很模糊,但当问题发生变化时,我经常会卡住。这让我很困惑。 对于这个问题,我卡在了如何用递归编写 DFS 上。给定一个字符串
最长回文子串,题解,leetcode, 力扣,python, C++, java 题目地址:https://leetcode.com/problems/longest-palindromic-sub
题目地址:https://leetcode.com/problems/palindrome-linked-list/#/descriptionopen in new window 题目描述 Giv
题目地址:https://leetcode.com/problems/longest-palindromic-subsequence/description/ 题目描述 Given a strin
这是一些代码,以“直接样式”确定列表是否是 n+1 比较中的回文 pal_d1 :: Eq a => [a] -> Bool pal_d1 l = let (r,_) = walk l l in r
这个问题在这里已经有了答案: String replace method is not replacing characters (5 个答案) 关闭 2 年前。 我正在努力理解我的代码对于这个 L
我是一名优秀的程序员,十分优秀!