1404. Number of Steps to Reduce a Number in Binary Representation to One - cocoder39/coco39_LC GitHub Wiki

class Solution:
    def numSteps(self, s: str) -> int:
        res = 0
        carry = 0
        n = len(s)
        for i in range(n-1, 0, -1):
            d = int(s[i]) + carry
            if d == 1:
                carry = 1
                res += 2
            elif d == 2:
                carry = 1
                res += 1
            elif d == 0:
                carry = 0
                res += 1
        
        # s[0] has to be 1
        # if s[0] + carry == 1 -> carry = 0 and res += 0
        # if s[0] + carry == 2 -> carry = 1 and res += 1
        return res + carry

simplified version

class Solution:
    def numSteps(self, s: str) -> int:
        res = 0
        carry = 0
        n = len(s)
        for i in range(n-1, 0, -1):
            d = int(s[i]) + carry
            if d == 1:
                carry = 1
                res += 2
            else:
                res += 1
        
        # s[0] has to be 1
        # if s[0] + carry == 1 -> carry = 0 and res += 0
        # if s[0] + carry == 2 -> carry = 1 and res += 1
        return res + carry