Skip to main content

LeetCode 3370: Smallest Number With All Set Bits – Problem Explanation and Solutions

Are you looking to master bit manipulation and tackle interesting coding challenges? In this post, we’ll explore LeetCode Problem 3370: Smallest Number With All Set Bits. We’ll dive deep into the problem statement, break down a brute force approach, and finally discuss an optimized solution.

If you’re preparing for technical interviews or just love solving algorithmic problems, this guide is for you!

Problem Statement: Smallest Number With All Set Bits

You are given a positive integer n. Your task is to find the smallest number x such that:

  • x is greater than or equal to n.
  • The binary representation of x consists only of set bits (1s).

Examples:

  • Example 1:
    Input: n = 5
    Output: 7
    Explanation:
    The binary representation of 7 is 111, which is the smallest number greater than or equal to 5 with all bits set.

  • Example 2:
    Input: n = 10
    Output: 15
    Explanation:
    The binary representation of 15 is 1111.

  • Example 3:
    Input: n = 3
    Output: 3
    Explanation:
    The binary representation of 3 is already 11, so it remains the same.

Constraints:

  • 1 <= n <= 1000

Approach 1: Brute Force Solution

The brute force method builds the smallest number with all set bits by iterating through the bits of n.

Code Implementation (C++):

class Solution {
    public:
        int smallestNumber(int n) {
            int num = 0;
            int i = 0;
            while (n) {
                num = num | (1 << i); // Set the ith bit in num
                i++;
                n = n >> 1;           // Right shift n to process the next bit
            }
            return num;
        }
    };
   

Explanation:

  1. Initialize num to 0 and a bit position i to 0.
  2. Iterate through the bits of n. For each bit:
    • Set the corresponding bit in num using the bitwise OR (|) operation.
    • Increment the bit position i.
    • Right shift n to move to the next bit.
  3. Once all bits have been processed, return num.

Example Walkthrough:

  • For n = 5 (binary 101):
    • Set the 0th bit: num = 1.
    • Set the 1st bit: num = 3 (11 in binary).
    • Set the 2nd bit: num = 7 (111 in binary).
  • Result: 7.

Time Complexity:

  • O(log n): The loop runs in proportion to the number of bits in n.
  • Space Complexity: O(1), as we use only a few variables.

Approach 2: Optimized Solution

A more efficient solution leverages the concept of finding the most significant bit (MSB) and setting all bits up to that position.

Code Implementation (C++):

class Solution {
    public:
        int smallestNumber(int n) {
            int msb = 31 - __builtin_clz(n);
            return (1 << (msb + 1)) - 1;     // Set all bits up to that position
        }
    };
   
Explanation:
  1. Find the MSB:
    Use the built-in function __builtin_clz(n) to count leading zeros. The MSB position is 31 - __builtin_clz(n).
  2. Set all bits:
    Shift 1 left by (msb + 1) positions and subtract 1 to get a number with all bits set.

Example Walkthrough:

  • For n = 10 (binary 1010):
    • MSB is at position 3.
    • (1 << 4) - 1 = 16 - 1 = 15 (1111 in binary).
  • Result: 15.

Time Complexity:

  • O(1): All operations are constant-time bit manipulations.
  • Space Complexity: O(1).

Why Bit Manipulation is Key

Bit manipulation allows you to solve problems like this efficiently. Instead of looping through numbers, you directly construct the result using shifts and bitwise operations.

Key Takeaways:

  • Use brute force if constraints are small.
  • For larger inputs, always look for patterns or shortcuts using bit manipulation.

Popular posts from this blog

Top 10 Beginner-Friendly LeetCode Questions and Their Solutions

If you're new to solving coding problems on LeetCode, it can feel overwhelming. Where do you start? Which problems are suitable for beginners? Don’t worry! In this blog post, I’ll guide you through 10 beginner-friendly LeetCode questions that are perfect for getting started on your coding journey. These problems will help you build confidence, improve your problem-solving skills, and lay a solid foundation in data structures and algorithms. Why Start with Beginner-Friendly Problems? Before diving into advanced topics like dynamic programming or graph theory, it’s essential to: Build a strong foundation in basic programming concepts. Understand how to approach a coding problem methodically. Gain familiarity with LeetCode’s platform and its problem structure. The following problems are simple yet impactful, designed to introduce you to common techniques like loops, arrays, strings, and basic math operations. 10 Beginner-Friendly LeetCode Problems 1. Two Sum (Easy) Problem Link : Two...

LeetCode 2583: Kth Largest Sum in a Binary Tree – Solution Explained

When working with binary trees, one common task is to analyze the properties of the tree's levels. In this blog post, we'll walk through a solution to LeetCode Problem 2583: Kth Largest Sum in a Binary Tree , a problem that challenges us to compute and find specific sums from different levels of a binary tree. Problem Statement You are given the root of a binary tree and a positive integer k . Your goal is to return the k-th largest level sum in the tree. The level sum is defined as the sum of the values of all nodes at the same depth in the tree. If the number of levels in the tree is less than k , the function should return -1 . Example 1: Input: root = [5, 8, 9, 2, 1, 3, 7, 4, 6] , k = 2 Output: 13 Explanation: Level 1 sum: 5 Level 2 sum: 8 + 9 = 17 Level 3 sum: 2 + 1 + 3 + 7 = 13 Level 4 sum: 4 + 6 = 10 The 2nd largest sum is 13 . Example 2: Input: root = [1, 2, null, 3] , k = 1 Output: 3 Explanation: The largest level sum is 3 (at the third level). This problem essentia...