Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
This article was originally published on Medium
Follow me:
Problem 2: Number of Steps to Reduce a Number to Zero
In this problem, you input a non-negative integer num
and return the number of steps to reduce it to zero. If the current number is even, you have to divide it by 2, otherwise, you have to subtract 1 from it.
For example:
Input: num = 14
Output: 6
Explanation:
Step 1) 14 is even; divide by 2 and obtain 7.
Step 2) 7 is odd; subtract 1 and obtain 6.
Step 3) 6 is even; divide by 2 and obtain 3.
Step 4) 3 is odd; subtract 1 and obtain 2.
Step 5) 2 is even; divide by 2 and obtain 1.
Step 6) 1 is odd; subtract 1 and obtain 0.
Input: num = 8
Output: 4
Explanation:
Step 1) 8 is even; divide by 2 and obtain 4.
Step 2) 4 is even; divide by 2 and obtain 2.
Step 3) 2 is even; divide by 2 and obtain 1.
Step 4) 1 is odd; subtract 1 and obtain 0.
This is a good example that we can use the Modulus/Remainder operator and the compound assignment operators.
Python Solution
Line: 3–10: We use a while
loop for num > 0
. If the modulus is 0, then it must be an even number so we divide the num
by 2 using a compound assignment /=2
, otherwise, we subtract 1 using a compound assignment -=1
. We increase the steps
by 1. Finally, we return the steps
.
We adjust the above code to the LeetCode environment.
class Solution:
def numberOfSteps (self, num: int) -> int:
steps = 0
while num > 0:
if num % 2 == 0:
num //= 2
else:
num -=1
steps += 1
return steps
Rust Solution
In Rust, we take the same steps as we did in Python.
Line 7–16: We assign 0 to a mutable variable steps
. While self.num
is greater than 0, we use the compound assignment /=2
if self.num
's remainder is 0, otherwise, we subtract 1, and increase the number of step by 1.
We adjust the above code to the LeetCode environment.
impl Solution {
pub fn number_of_steps (mut num: i32) -> i32 {
let mut steps = 0;
while num > 0 {
if num % 2 == 0 {
num /= 2;
} else {
num -=1;
}
steps += 1;
}
steps
}
}