【leetcode】1017. Convert to Base -2
阿新 • • 發佈:2019-04-01
bject 思路 anti its 需要 plan join solution pla
題目如下:
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]])
【leetcode】1017. Convert to Base -2