【leetcode】1017. Convert to Base -2
题目如下:
Given a number
N
, return a string consisting of"0"
s and"1"
s that represents its value in base-2
(negative two).The returned string must have no leading zeroes, unless the string is
"0"
.
Example 1:
Input: 2 Output: "110" Explantion: (-2) ^ 2 + (-2) ^ 1 = 2
Example 2:
Input: 3 Output: "111" Explantion: (-2) ^ 2 + (-2) ^ 1 + (-2) ^ 0 = 3
Example 3:
Input: 4 Output: "100" Explantion: (-2) ^ 2 = 4
Note:
0 <= N <= 10^9
解题思路:以12为例,转成二进制后是1100,假设最右边的下标为0,从右往左下标一次加1。很显然,下标是偶数位的情况,值是正数;而下标为奇数位的情况值是负数。为了要弥补负数带来的影响,需要加上等于这个负数*2的绝对值,而这个值恰好就是该负数的下一位。因此只要奇数位出现了1,那么相应就要在其后面的偶数位加上1,如果偶数位本来就是1,则需要考虑进位。
代码如下:
class Solution(object): def baseNeg2(self, N): """ :type N: int :rtype: str """ bs = bin(N)[2:][::-1] res = [int(i) for i in list(bs)] def carrier(res,i): if i == len(res) - 1: res += [1] if len(res) % 2 == 0: res += [1] else: res[i + 1] += 1 for i in range(1,len(res)): if res[i] == 0: continue elif res[i] == 1 and i % 2 == 1: carrier(res,i) elif res[i] == 2: res[i] = 0 carrier(res, i) return ''.join([str(i) for i in res[::-1]])