# 1342. Number of Steps to Reduce a Number to Zero

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 = 14Output: 6Explanation: 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 = 8Output: 4Explanation: 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 = 123Output: 12`

Constraints:

• `0 <= num <= 10^6`

Approach 1:

Naive approach:

`class Solution:    def numberOfSteps(self, num: int) -> int:        cnt=0        last=0        while(num):            last=[0,1][num&1]            if(last):                num-=1            else:                num//=2            cnt+=1            return(cnt)`

Time: O(Steps)

Space: O(1)

Approach 2:

Using bit manipulation:

`class Solution:    def numberOfSteps(self, num: int) -> int:        cnt=0        last=0        while(num):            last=[0,1][num&1]            if(last):                num=num^1            else:                num>>=1            cnt+=1            return(cnt)`

Time: O(Steps)

Space: O(1)