Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Count Good Numbers

Updated
2 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "1922" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

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

Explanation

Here's the solution to the problem:

  • The number of choices for even positions (0, 2, 4, ...) are 0, 2, 4, 6, 8 which gives 5 options.
  • The number of choices for odd positions (1, 3, 5, ...) are 2, 3, 5, 7 which gives 4 options.
  • The total number of good digit strings of length n is thus 5ceil(n/2) * 4floor(n/2). We need to calculate this modulo 109 + 7 using the property of modular exponentiation to avoid overflow issues since n can be very large.

  • Runtime Complexity: O(log n), due to the modular exponentiation. Storage Complexity: O(1).

Code

    def countGoodNumbers(n: int) -> int:
    """
    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.
    """
    MOD = 10**9 + 7

    def power(base, exp, mod):
        res = 1
        base %= mod
        while exp > 0:
            if exp % 2 == 1:
                res = (res * base) % mod
            base = (base * base) % mod
            exp //= 2
        return res

    even_count = (n + 1) // 2
    odd_count = n // 2

    return (power(5, even_count, MOD) * power(4, odd_count, MOD)) % MOD

More from this blog

C

Chatmagic blog

2894 posts