LeetCode 1922. Count Good Numbers Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
1922. Count Good Numbers

Description

A digit string is good if the digits (0-indexed) at even indices are even and the digits at odd indices are prime (2, 3, 5, or 7).

  • For example, "2582" is good because the digits (2 and 8) at even positions are even and the digits (5 and 2) at odd positions are prime. However, "3245" is not good because 3 is at an even index but is not even.

Given an integer n, return the total number of good digit strings of length n. Since the answer may be large, return it modulo 109 + 7.

A digit string is a string consisting of digits 0 through 9 that may contain leading zeros.

 

Example 1:

Input: n = 1
Output: 5
Explanation: The good numbers of length 1 are "0", "2", "4", "6", "8".

Example 2:

Input: n = 4
Output: 400

Example 3:

Input: n = 50
Output: 564908303

 

Constraints:

  • 1 <= n <= 1015

Solutions

Solution 1: Fast Exponentiation

For a "good number" of length n, the even-indexed positions have \lceil n2 \rceil = \lfloor n + 12 \rfloor digits, and these positions can be filled with 5 different digits (0, 2, 4, 6, 8). The odd-indexed positions have \lfloor n2 \rfloor digits, and these positions can be filled with 4 different digits (2, 3, 5, 7). Therefore, the total number of "good numbers" of length n is:

ans = 5\lceil n2 \rceil × 4\lfloor n2 \rfloor

We can use fast exponentiation to compute 5\lceil n2 \rceil and 4\lfloor n2 \rfloor. The time complexity is O(log n), and the space complexity is O(1).

PythonJavaC++GoTypeScript
class Solution: def countGoodNumbers(self, n: int) -> int: mod = 10**9 + 7 return pow(5, (n + 1) >> 1, mod) * pow(4, n >> 1, mod) % mod(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 !