原题说明
Given two numbers arr1
and arr2
in base -2, return the result of adding them together.
Each number is given in array format: as an array of 0s and 1s, from most significant bit to least significant bit. For example, arr = [1,1,0,1]
represents the number (-2)^3 + (-2)^2 + (-2)^0 = -3
. A number arr
in array format is also guaranteed to have no leading zeros: either arr == [0]
or arr[0] == 1
.
Return the result of adding arr1
and arr2
in the same format: as an array of 0s and 1s with no leading zeros.
Example 1:
Input: arr1 = [1,1,1,1,1], arr2 = [1,0,1]
Output: [1,0,0,0,0]
Explanation: arr1 represents 11, arr2 represents 5, the output represents 16.
Note:
1 <= arr1.length <= 1000
1 <= arr2.length <= 1000
arr1
andarr2
have no leading zerosarr1[i]
is0
or1
arr2[i]
is0
or1
解题思路
这道题主要考察bit manipulation,也就是位数的转换。
与base 2相比,只需要每次carry
变换符号即可,因为相邻位上-2^n
与-2^(n+1)
的符号相反。
但要注意,我们一定要使用current & 1
以及 -(current >> 1)
来计算当前位的值以及carry
的值,
如果使用%
和除法的话,对于负数将得到错误的结果。
示例代码 (cpp)
1 | class Solution { |
示例代码 (java)
1 | class Solution { |
示例代码 (python)
1 | class Solution: |
复杂度分析
时间复杂度: O(M + N)
空间复杂度: O(1)
视频讲解
我们在Youtube上更新了视频讲解,欢迎关注!