Medium
You are given a positive integer n
, you can do the following operation any number of times:
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
.
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
@Suppress("NAME_SHADOWING")
class Solution {
fun minOperations(n: Int): Int {
var n = n
var count = 0
while (n > 0) {
val x = kotlin.math.ln(n.toDouble()) / kotlin.math.ln(2.0)
if (x % 1.0 < 0.5) {
n = kotlin.math.abs(n - Math.pow(2.0, x.toInt().toDouble()).toInt())
count++
} else {
n = kotlin.math.abs(n - Math.pow(2.0, (x.toInt() + 1).toDouble()).toInt())
count++
}
}
return count
}
}