1. 程式人生 > >【leetcode】1017. Convert to Base -2

【leetcode】1017. Convert to Base -2

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:

  1. 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