题目如下:
Given a number
s
in their binary representation. 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'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: 0Constraints:
1 <= s.length <= 500
s
consists of characters '0' or '1's[0] == '1'
解题思路:依次判断s的最后一位。如果是0,表示为偶数,去掉最后的0即可;如果是1,表示为奇数,做加法操作。
代码如下:
class Solution(object): def numSteps(self, s): """ :type s: str :rtype: int """ res = 0 l = list(s) while len(l) > 1: v = l.pop(-1) res += 1 if int(v) == 0: continue else: l.append('0') for i in range(len(l)-2,-1,-1): if l[i] == '0': l[i] = '1' break else: l[i] = '0' if l[0] == '0':l = ['1'] + l return res