Description#
Given an integer num
, return the number of steps to reduce it to zero.
In one step, if the current number is even, you have to divide it by 2
, otherwise, you have to subtract 1
from it.
Example 1:
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.
Example 2:
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.
Example 3:
Input: num = 123
Output: 12
Constraints:
Solutions#
Solution 1#
1
2
3
4
5
6
7
8
9
10
| class Solution:
def numberOfSteps(self, num: int) -> int:
ans = 0
while num:
if num & 1:
num -= 1
else:
num >>= 1
ans += 1
return ans
|
1
2
3
4
5
6
7
8
9
10
11
| class Solution {
public int numberOfSteps(int num) {
int ans = 0;
while (num != 0) {
num = (num & 1) == 1 ? num - 1 : num >> 1;
++ans;
}
return ans;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
| class Solution {
public:
int numberOfSteps(int num) {
int ans = 0;
while (num) {
num = num & 1 ? num - 1 : num >> 1;
++ans;
}
return ans;
}
};
|
1
2
3
4
5
6
7
8
9
10
11
12
| func numberOfSteps(num int) int {
ans := 0
for num != 0 {
if (num & 1) == 1 {
num--
} else {
num >>= 1
}
ans++
}
return ans
}
|
1
2
3
4
5
6
7
8
| function numberOfSteps(num: number): number {
let ans = 0;
while (num) {
num = num & 1 ? num - 1 : num >>> 1;
ans++;
}
return ans;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| impl Solution {
pub fn number_of_steps(mut num: i32) -> i32 {
let mut count = 0;
while num != 0 {
if num % 2 == 0 {
num >>= 1;
} else {
num -= 1;
}
count += 1;
}
count
}
}
|
Solution 2#
1
2
3
4
5
6
7
8
9
| class Solution:
def numberOfSteps(self, num: int) -> int:
if num == 0:
return 0
return 1 + (
self.numberOfSteps(num // 2)
if num % 2 == 0
else self.numberOfSteps(num - 1)
)
|
1
2
3
4
5
6
7
8
9
| class Solution {
public int numberOfSteps(int num) {
if (num == 0) {
return 0;
}
return 1 + numberOfSteps((num & 1) == 0 ? num >> 1 : num - 1);
}
}
|
1
2
3
4
5
6
7
| class Solution {
public:
int numberOfSteps(int num) {
if (num == 0) return 0;
return 1 + (num & 1 ? numberOfSteps(num - 1) : numberOfSteps(num >> 1));
}
};
|
1
2
3
4
5
6
7
8
9
| func numberOfSteps(num int) int {
if num == 0 {
return 0
}
if (num & 1) == 0 {
return 1 + numberOfSteps(num>>1)
}
return 1 + numberOfSteps(num-1)
}
|
1
2
3
4
5
6
7
8
9
10
11
| impl Solution {
pub fn number_of_steps(mut num: i32) -> i32 {
if num == 0 {
0
} else if num % 2 == 0 {
1 + Solution::number_of_steps(num >> 1)
} else {
1 + Solution::number_of_steps(num - 1)
}
}
}
|