题目一:求两个字符串类型数字的和
class Solution:
def addStrings(self, num1: str, num2: str) -> str:
li1, len1 = list(num1), len(num1)
li2, len2 = list(num2), len(num2)
res = []
before = 0
if len1 < len2:
for i in range(len2 - len1):
li1.insert(0, '0')
elif len1 > len2:
for i in range(len1 - len2):
li2.insert(0, '0')
print(li1,li2)
for i in range(len(li1)-1, -1, -1):
temp = int(li1[i]) + int(li2[i]) + before
now = temp % 10
before = temp // 10
res.insert(0,str(now))
if before != 0:
res.insert(0,str(before))
return ''.join(res)
优化的解法:
class Solution:
def addStrings(self, num1: str, num2: str) -> str:
i, j = len(num1) - 1, len(num2) - 1
carry = 0
res = ''
while i >= 0 or j >= 0:
n1 = int(num1[i]) if i >= 0 else 0
n2 = int(num2[j]) if j >= 0 else 0
temp = n1 + n2 + carry
carry = temp // 10
res = str(temp % 10) + res
i, j = i - 1, j - 1
return '1' + res if carry else res
题目二:一行实现1-5000之间所有偶数求和
# 常规写法
res = 0
for i in range(5001):
if i % 2 == 0:
res += i
print(res)
# 这么写还是错的
# res += i for i in range(2, 5001, 2)
# print(res)
# 优化一:range步长为2
res = 0
for i in range(2, 5001, 2):
res += i
print(res)
# 优化二:使用sum函数和range函数
print(sum(range(2, 5001, 2)))
# 优化三:使用reduce函数和lambda函数
from functools import reduce
print(reduce(lambda a, b: a + b, range(2, 5001, 2)))