# Solving Leetcode Interviews in Seconds with AI: New 21 Game


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "837" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), 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
	> Alice plays the following game, loosely based on the card game "21". Alice starts with 0 points and draws numbers while she has less than k points. During each draw, she gains an integer number of points randomly from the range [1, maxPts], where maxPts is an integer. Each draw is independent and the outcomes have equal probabilities. Alice stops drawing numbers when she gets k or more points. Return the probability that Alice has n or fewer points. Answers within 10-5 of the actual answer are considered accepted.   Example 1:  Input: n = 10, k = 1, maxPts = 10 Output: 1.00000 Explanation: Alice gets a single card, then stops.  Example 2:  Input: n = 6, k = 1, maxPts = 10 Output: 0.60000 Explanation: Alice gets a single card, then stops. In 6 out of 10 possibilities, she is at or below 6 points.  Example 3:  Input: n = 21, k = 17, maxPts = 10 Output: 0.73278    Constraints:  0 <= k <= n <= 104 1 <= maxPts <= 104  

	# Explanation
	Here's a breakdown of the approach, complexity, and the Python code:

*   **Approach:**
    *   Dynamic Programming: Calculate the probability of reaching each score from `k` to `n` using the probabilities of reaching lower scores.
    *   Sliding Window Optimization: Use a sliding window to efficiently compute the sum of probabilities for the previous `maxPts` scores, avoiding redundant calculations. This is key for performance.

*   **Complexity:**
    *   Runtime: O(n)
    *   Storage: O(n)

	
	# Code
	```python
	def new21Game(n: int, k: int, maxPts: int) -> float:
    """
    Calculates the probability that Alice has n or fewer points.

    Args:
        n: The maximum number of points Alice can have.
        k: The number of points Alice needs to reach to stop drawing.
        maxPts: The maximum number of points Alice can gain in a single draw.

    Returns:
        The probability that Alice has n or fewer points.
    """

    if k == 0:
        return 1.0
    if n >= k + maxPts:
        return 1.0

    dp = [0.0] * (n + 1)
    dp[0] = 1.0
    window_sum = 1.0
    probability = 0.0

    for i in range(1, n + 1):
        dp[i] = window_sum / maxPts
        if i < k:
            window_sum += dp[i]
        else:
            probability += dp[i]
        if i >= maxPts:
            window_sum -= dp[i - maxPts]

    return probability
	```
			
