Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/2571.html
2571. Minimum Operations to Reduce an Integer to 0
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
fromn
.
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
.
Example 1:
Input: n = 39 Output: 3 Explanation: We can do the following operations: - Add 20 = 1 to n, so now n = 40. - Subtract 23 = 8 from n, so now n = 32. - Subtract 25 = 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 21 = 2 to n, so now n = 56. - Add 23 = 8 to n, so now n = 64. - Subtract 26 = 64 from n, so now n = 0. So the minimum number of operations is 3.
Constraints:
1 <= n <= 105
Solutions
-
class Solution { public int minOperations(int n) { int ans = 0, cnt = 0; for (; n > 0; n >>= 1) { if ((n & 1) == 1) { ++cnt; } else if (cnt > 0) { ++ans; cnt = cnt == 1 ? 0 : 1; } } ans += cnt == 1 ? 1 : 0; ans += cnt > 1 ? 2 : 0; return ans; } }
-
class Solution { public: int minOperations(int n) { int ans = 0, cnt = 0; for (; n > 0; n >>= 1) { if ((n & 1) == 1) { ++cnt; } else if (cnt > 0) { ++ans; cnt = cnt == 1 ? 0 : 1; } } ans += cnt == 1 ? 1 : 0; ans += cnt > 1 ? 2 : 0; return ans; } };
-
class Solution: def minOperations(self, n: int) -> int: ans = cnt = 0 while n: if n & 1: cnt += 1 elif cnt: ans += 1 cnt = 0 if cnt == 1 else 1 n >>= 1 if cnt == 1: ans += 1 elif cnt > 1: ans += 2 return ans
-
func minOperations(n int) (ans int) { cnt := 0 for ; n > 0; n >>= 1 { if n&1 == 1 { cnt++ } else if cnt > 0 { ans++ if cnt == 1 { cnt = 0 } else { cnt = 1 } } } if cnt == 1 { ans++ } else if cnt > 1 { ans += 2 } return }