大数相加,字符串相加,(k进制相加)2 进制,36进制相加

题目来源:力扣(LeetCode)和牛客网在线编程题
链接:https://leetcode-cn.com/problems
https://www.nowcoder.com/activity/oj
特别鸣谢:来自夸夸群的 醉笑陪公看落花@知乎,王不懂不懂@知乎,QFIUNE@csdn
感谢任老师倾囊相授,感谢小伙伴们督促学习,一起进步

文章目录

  • leetcode 415 字符串相加
  • k进制相加

leetcode 415 字符串相加

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
大数相加,字符串相加,(k进制相加)2 进制,36进制相加_第1张图片
python tips:

  • 集合转字符串 .join() 集合里面只能是字符串,不能是int
  • 字符串反转 num1[::-1] (切片,步长-1)
  • 整除 //
  • itertools.zip_longest (补齐) vs zip (截断)

https://blog.csdn.net/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)
    大数相加,字符串相加,(k进制相加)2 进制,36进制相加_第2张图片
int('a',11)
Out[6]: 10

  • python 进制转换

大数相加,字符串相加,(k进制相加)2 进制,36进制相加_第3张图片

'''
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]

你可能感兴趣的:(python,学习笔记)