Number of Steps to Reduce a Number in Binary Representation to One

Given a number s in their binary representation. Return the number of steps to reduce it to 1 under the following rules:

It's guaranteed that you can always reach to one for all testcases.

 

Example 1:

Input: s = "1101"
Output: 6
Explanation: "1101" corressponds to number 13 in their decimal representation.
Step 1) 13 is odd, add 1 and obtain 14. 
Step 2) 14 is even, divide by 2 and obtain 7.
Step 3) 7 is odd, add 1 and obtain 8.
Step 4) 8 is even, divide by 2 and obtain 4.  
Step 5) 4 is even, divide by 2 and obtain 2. 
Step 6) 2 is even, divide by 2 and obtain 1.  

Example 2:

Input: s = "10"
Output: 1
Explanation: "10" corressponds to number 2 in their decimal representation.
Step 1) 2 is even, divide by 2 and obtain 1.  

Example 3:

Input: s = "1"
Output: 0

 

Constraints:


Solution:

class Solution {
    // 1101
    // 1110 
    //  111
    // 1000
    //  100
    //   10
    //    1
    public int numSteps(String s) {
        int res = 0;
        int carry = 0;
        for (int i = s.length() - 1; i > 0; i--){
            if (s.charAt(i) - '0' + carry == 0){
                res++;
                carry = 0;
            }else if (s.charAt(i) - '0' + carry == 1) {
                res += 2;     // after adding 1 and / 2
                carry = 1;    // example: 1 + 1 -> 10 -> 10 >> 1 -> carry 1 over
            }else { 
                // both digit and carry is 1
                res++;          // current digit is 1, adding carry over 1 is 10 -> only do >> 1 and carry 1 over to the left
                carry = 1;
            }
        }
        return res + carry; //  need to consider 1 at index 0 
    }
}