题目来源:力扣(LeetCode)和牛客网在线编程题
链接:https://leetcode-cn.com/problems
https://www.nowcoder.com/activity/oj
特别鸣谢:来自夸夸群的 醉笑陪公看落花@知乎,王不懂不懂@知乎,QFIUNE@csdn
感谢任老师倾囊相授,感谢小伙伴们督促学习,一起进步
leetcode 415 字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
python tips:
- 集合转字符串 .join() 集合里面只能是字符串,不能是int
- 字符串反转 num1[::-1] (切片,步长-1)
- 整除 //
- itertools.zip_longest (补齐) vs zip (截断)
https://blog.youkuaiyun.com/wosind/article/details/97484104
关于Python 循环中用+和+=操作符来累加字符串
class Solution:
def add(self,a,b,jinwei):
c = (int(a)+int(b)+jinwei)%10
jinwei = (int(a)+int(b)+jinwei)//10
return str(c),jinwei
def addStrings(self, num1: str, num2: str) -> str:
import itertools
ans = []
jinwei = 0
for a,b in itertools.zip_longest(num1[::-1],num2[::-1],fillvalue=0):
c,jinwei = self.add(a,b,jinwei)
ans.append(c)
if jinwei!=0:ans.append(str(jinwei))
return ''.join(ans)[::-1]
if __name__ == '__main__':
num1 = '2345678'
num2 = '987654'
# ans = '2333333'
num1 = "1"
num2 = "9"
# ans = '10'
# num1 = "1"
# num2 = "5"
# ans = '6'
# num1 = "9"
# num2 = "99"
# # ans = '10'
ans = Solution().addStrings(num1,num2)
print(ans)
k进制相加
https://leetcode-cn.com/problems/add-binary/
tips:
- int(a,k) 将十进制数转换成k进制数 a不能为0
- 需要做如下处理 a = int(a,k) if a!=0 else 0
- 在字符串加减的基础代码上,对相加之后的结果转换为对应的进制表示
- c = c if c<10 else chr(ord(‘a’)+c-9)
int('a',11)
Out[6]: 10
'''
k进制加法
'''
class Solution:
def add(self,a,b,jinwei,k):
a = int(a,k) if a!=0 else 0
b = int(b,k) if b!=0 else 0
c = (a+b+jinwei)%k
jinwei = (a+b+jinwei)//k
c = c if c<10 else chr(ord('a')+c-9)
return str(c),jinwei
def addStrings(self, num1: str, num2: str,k:int) -> str:
import itertools
ans = []
jinwei = 0
for a,b in itertools.zip_longest(num1[::-1],num2[::-1],fillvalue=0):
c,jinwei = self.add(a,b,jinwei,k)
ans.append(c)
if jinwei!=0:ans.append(str(jinwei))
return ''.join(ans)[::-1]