Welcome to Subscribe On Youtube
2749. Minimum Operations to Make the Integer Zero
Description
You are given two integers num1
and num2
.
In one operation, you can choose integer i
in the range [0, 60]
and subtract 2i + num2
from num1
.
Return the integer denoting the minimum number of operations needed to make num1
equal to 0
.
If it is impossible to make num1
equal to 0
, return -1
.
Example 1:
Input: num1 = 3, num2 = -2 Output: 3 Explanation: We can make 3 equal to 0 with the following operations: - We choose i = 2 and substract 22 + (-2) from 3, 3 - (4 + (-2)) = 1. - We choose i = 2 and substract 22 + (-2) from 1, 1 - (4 + (-2)) = -1. - We choose i = 0 and substract 20 + (-2) from -1, (-1) - (1 + (-2)) = 0. It can be proven, that 3 is the minimum number of operations that we need to perform.
Example 2:
Input: num1 = 5, num2 = 7 Output: -1 Explanation: It can be proven, that it is impossible to make 5 equal to 0 with the given operation.
Constraints:
1 <= num1 <= 109
-109 <= num2 <= 109
Solutions
-
class Solution { public int makeTheIntegerZero(int num1, int num2) { for (long k = 1;; ++k) { long x = num1 - k * num2; if (x < 0) { break; } if (Long.bitCount(x) <= k && k <= x) { return (int) k; } } return -1; } }
-
class Solution { public: int makeTheIntegerZero(int num1, int num2) { using ll = long long; for (ll k = 1;; ++k) { ll x = num1 - k * num2; if (x < 0) { break; } if (__builtin_popcountll(x) <= k && k <= x) { return k; } } return -1; } };
-
class Solution: def makeTheIntegerZero(self, num1: int, num2: int) -> int: for k in count(1): x = num1 - k * num2 if x < 0: break if x.bit_count() <= k <= x: return k return -1
-
func makeTheIntegerZero(num1 int, num2 int) int { for k := 1; ; k++ { x := num1 - k*num2 if x < 0 { break } if bits.OnesCount(uint(x)) <= k && k <= x { return k } } return -1 }