2571. Minimum Operations to Reduce an Integer to 0

1. Description

You are given a positive integer n, you can do the following operation any number of times:

  • Add or subtract a power of 2 from n.

Return the minimum number of operations to make n equal to 0.
A number x is power of 2 if x == 2i where i >= 0.

2. Example

Example 1

Input: n = 39
Output: 3
Explanation: We can do the following operations:

  • Add 20 = 1 to n, so now n = 40.
  • Subtract 2$^3$ = 8 from n, so now n = 32.
  • Subtract 2$^5$ = 32 from n, so now n = 0.

It can be shown that 3 is the minimum number of operations we need to make n equal to 0.

Example 2

Input: n = 54
Output: 3
Explanation: We can do the following operations:

  • Add 2$^1$ = 2 to n, so now n = 56.
  • Add 2$^3$ = 8 to n, so now n = 64.
  • Subtract 26 = 64 from n, so now n = 0.

So the minimum number of operations is 3.

3. Constraints

  • 1 <= n <= 10$^5$

4. Solutions

Bit Manipulation

Time complexity: O(logn)
Space complexity: O(1)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
    int minOperations(int n) {
        int count = 0;
        while (n > 0) {
            if ((n & 1) == 1) {
                ++count;

                if ((n & 3) == 3) {
                    ++n;
                } else {
                    --n;
                }
            }

            n >>= 1;
        }

        return count;
    }
};
comments powered by Disqus