原题链接
https://leetcode.com/problems/plus-one/
https://leetcode.com/problems/add-binary/
解题思路
这两道题其实思路比较类似,都是做一个加法,不过一个是10进制,一个是2进制,本质相同;用一个列表carry记录每一位的进位情况即可。直接上代码。
代码
plus one
class Solution(object):
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
digits.insert(0, 0)
carry = [0 for i in range(len(digits))]
for i in range(len(digits)-1, -1, -1):
if i==len(digits)-1:
digits[i] += 1
else:
digits[i] += carry[i]
if digits[i]==10:
digits[i] = 0
carry[i-1] = 1
if digits[0]==0:
return digits[1:]
else:
return digits
add binary
class Solution(object):
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
ans = ''
length = max(len(a), len(b))+1
while len(a) < length:
a = '0' + a
while len(b) < length:
b = '0' + b
summing = [0 for i in range(len(a))]
carry = [0 for i in range(len(a))]
for i in range(len(a)-1, -1, -1):
summing[i] = int(a[i]) + int(b[i]) + carry[i]
if summing[i] > 1:
summing[i] -= 2
carry[i - 1] = 1
if summing[0] == 0:
del summing[0]
for item in summing:
ans += str(item)
return ans