1404. Number of Steps to Reduce a Number in Binary Representation to One
Description
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
1to it.
It is guaranteed that you can always reach one for all test cases.
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:
1 <= s.length <= 500sconsists of characters '0' or '1's[0] == '1'
Solutions
Solution: Bit Manipulation
- Time complexity: O(n - 1)
- Space complexity: O(1)
- carry = 0 and current = 0, number is even, have to divide it by 2, step + 1
- carry = 0 and current = 1, number is odd, have to add 1 and divide it by 2, step + 2
- carry = 1 and current = 1, number is even, divide it by 2, step + 1
- carry = 1 and current = 0, number is odd, have to add 1 and divide it by 2, step + 2
JavaScript
js
/**
* @param {string} s
* @return {number}
*/
const numSteps = function (s) {
let step = 0;
let carry = 0;
for (let index = s.length - 1; index > 0; index--) {
const value = s[index];
if (value === '0') {
step += carry ? 2 : 1;
continue;
}
step += carry ? 1 : 2;
carry = 1;
}
return step + carry;
};