Given a non-negative integer num
, 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.
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.
Input: num = 123 Output: 12
0 <= num <= 10^6
# @param {Integer} num
# @return {Integer}
def number_of_steps (num)
ret = 0
while num != 0
if num % 2 == 0
num /= 2
else
num -= 1
end
ret += 1
end
return ret
end
impl Solution {
pub fn number_of_steps (num: i32) -> i32 {
let mut num = num;
let mut ret = 0;
while num != 0 {
match num % 2 {
0 => num /= 2,
_ => num -= 1,
}
ret += 1;
}
ret
}
}