# Solving Leetcode Interviews in Seconds with AI: Number of 1 Bits


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "191" 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
	> Given a positive integer n, write a function that returns the number of set bits in its binary representation (also known as the Hamming weight).   Example 1:  Input: n = 11 Output: 3 Explanation: The input binary string 1011 has a total of three set bits.  Example 2:  Input: n = 128 Output: 1 Explanation: The input binary string 10000000 has a total of one set bit.  Example 3:  Input: n = 2147483645 Output: 30 Explanation: The input binary string 1111111111111111111111111111101 has a total of thirty set bits.    Constraints:  1 <= n <= 231 - 1    Follow up: If this function is called many times, how would you optimize it?

	# Explanation
	Here's the breakdown of the solution:

*   **Bit Manipulation:** The core idea is to efficiently clear the least significant set bit in each iteration. This is done using the bitwise AND operation of `n` with `n-1`. `n & (n - 1)` clears the rightmost set bit.
*   **Iterative Counting:** We iterate until `n` becomes zero. In each iteration, we clear the least significant set bit and increment a counter.
*   **Optimization (Follow Up):** For repeated calls with the same inputs, we can use memoization (caching) to store the results of previous calculations.

*   **Time and Space Complexity:** O(log n) runtime, where n is the input number, because in the worst case we iterate as many times as there are bits in 'n'. O(1) storage complexity, excluding the memoization optimization, since we're only using a constant amount of extra space. Memoization would add O(k) storage, where k is the number of unique inputs cached.

	
	# Code
	```python
	def count_set_bits(n: int) -> int:
    """
    Counts the number of set bits (1s) in the binary representation of a positive integer.

    Args:
        n: A positive integer.

    Returns:
        The number of set bits in the binary representation of n.
    """

    count = 0
    while n > 0:
        n &= (n - 1)  # Clear the least significant set bit
        count += 1
    return count

# Optimized version with memoization
_memo = {}  # Cache to store results

def count_set_bits_optimized(n: int) -> int:
    """
    Counts set bits using memoization for potential repeated calls.
    """
    if n in _memo:
        return _memo[n]

    count = 0
    temp_n = n
    while temp_n > 0:
        temp_n &= (temp_n - 1)
        count += 1
    _memo[n] = count
    return count
	```
			
