LeetCode 0906. Super Palindromes Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
0906. Super Palindromes

Description

Let's say a positive integer is a super-palindrome if it is a palindrome, and it is also the square of a palindrome.

Given two positive integers left and right represented as strings, return the number of super-palindromes integers in the inclusive range [left, right].

 

Example 1:

Input: left = "4", right = "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.

Example 2:

Input: left = "1", right = "2"
Output: 1

 

Constraints:

  • 1 <= left.length, right.length <= 18
  • left and right consist of only digits.
  • left and right cannot have leading zeros.
  • left and right represent integers in the range [1, 1018 - 1].
  • left is less than or equal to right.

Solutions

Solution 1: Preprocessing + Enumeration

According to the problem description, we assume that the super palindrome number x = p2 ∈ [1, 1018), where p is a palindrome number, so p ∈ [1, 109). We can enumerate the first half of the palindrome number p, then reverse it, and concatenate it to get all palindrome numbers, which are recorded in the array ps.

Next, we traverse the array ps. For each p, we calculate p2, check whether it is in the interval [L, R], and also check whether p2 is a palindrome number. If it is, the answer is incremented by one.

After the traversal, return the answer.

The time complexity is O(M14 × log M), and the space complexity is O(M14). Where M is the upper bound of L and R, and in this problem, M ≤ 1018.

Similar problems:

PythonJavaC++GoTypeScript
ps = [] for i in range(1, 10**5 + 1): s = str(i) t1 = s[::-1] t2 = s[:-1][::-1] ps.append(int(s + t1)) ps.append(int(s + t2)) class Solution: def superpalindromesInRange(self, left: str, right: str) -> int: def is_palindrome(x: int) -> bool: y, t = 0, x while t: y = y * 10 + t % 10 t //= 10 return x == y l, r = int(left), int(right) return sum(l <= x <= r and is_palindrome(x) for x in map(lambda x: x * x, ps))(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !