DEV Community

Cover image for 1404. Number of Steps to Reduce a Number in Binary Representation to One
MD ARIFUL HAQUE
MD ARIFUL HAQUE

Posted on • Edited on

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

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

Medium

Given the binary representation of an integer as a string s, return the number of steps to reduce it to 1 under the following rules:

  • If the current number is even, you have to divide it by 2.
  • If the current number is odd, you have to add 1 to it.

It is guaranteed that you can always reach one for all test cases.

Example 1:

  • Input: "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:

  • 1 <= s.length <= 500
  • s consists of characters '0' or '1'
  • s[0] == '1'

Solution:

class Solution {

    /**
     * @param String $s
     * @return Integer
     */
    function numSteps($s) {
        $ans = 0;        
        while ($s[strlen($s) - 1] == '0') {
            $s = substr($s, 0, -1);
            ++$ans;
        }
        if ($s == "1") return $ans;
        ++$ans;
        for ($i = 0; $i < strlen($s); $i++) {
            $ans += $s[$i] == '1' ? 1 : 2;
        }
        return $ans;  
    }
}
Enter fullscreen mode Exit fullscreen mode

Contact Links

If you found this series helpful, please consider giving the repository a star on GitHub or sharing the post on your favorite social networks 😍. Your support would mean a lot to me!

If you want more helpful content like this, feel free to follow me:

Top comments (0)