当前位置: 首页 > article >正文

leetcode415拓展字符串相加(带符号)

class Solution:
  def addtoStrings(self,num1,num2):
    # 两个数字字符串相加的结果转为字符串
    i, j, add, res = len(num1)-1, len(num2)-1, 0, ''
    while i >= 0 or j >= 0 or add != 0:
      n1 = int(num1[i]) if i >= 0 else 0
      n2 = int(num2[j]) if j >= 0 else 0
      tmp = n1 + n2 + add
      # 借助除法和取余来得到进位和剩余位数的值
      add = tmp // 10
      res = str(tmp%10) + res
      i -= 1
      j -= 1
    return res
    
  def compare(self,num1,num2):
    # 比较num1和num2的大小 要求num1大于等于num2 这样判断方便后面做减法
    if len(num1) > len(num2):
      return True
    elif len(num2) > len(num1):
      return False
    else:
      # 二者相等 从高位开始比较
      for i in range(len(num1)):
        if int(num1[i]) < int(num2[i]):
          return False
      return True
      
  def minustoStrings(self,num1,num2):
    # 这里针对 num1大于等于num2的 两个数字字符串相减的结果转为字符串
    # num1 减 num2 的字符串结果
    i, j, minus, res = len(num1)-1, len(num2)-1, 0, ''
    while i >= 0:
      n1 = int(num1[i]) if i >= 0 else 0
      n2 = int(num2[j]) if j >= 0 else 0
      diff = n1 - n2 - minus
      if diff < 0:
        diff += 10
        minus = 1
      else:
        minus = 0
      res = str(diff) + res
      i -= 1
      j -= 1
    for i in range(len(res)):
      if res[i] != '0':
        return res[i:]
    return '0'
        
  def addStrings(self, num1, num2) :
    if num1[0] == '-' and num2[0] == '-':
      return '-' + self.addtoStrings(num1[1:],num2[1:])
    if num1[0] == '-':
      # 若num1 更大 则为负 若num2更大则为正
      if self.compare(num1[1:],num2):
        return '-' + self.minustoStrings(num1[1:],num2)
      else:
        return self.minustoStrings(num2,num1[1:])     
    if num2[0] == '-':
       # 若num2 更大 则为负 若num1更大则为正
      if self.compare(num2[1:],num1):
        return '-' + self.minustoStrings(num2[1:],num1)
      else:
        return self.minustoStrings(num1,num2[1:])  
    else:
      return self.addtoStrings(num1,num2)
      
    

num1 = '53'
num2 = '-3'
a = Solution()
print(a.addStrings(num1,num2))

http://www.kler.cn/a/133314.html

相关文章:

  • vue3:computed
  • 如何修改npm包
  • uniapp ios app以framwork形式接入sentry
  • 动态规划-背包问题——[模版]完全背包问题
  • 决策树基本 CART Python手写实现
  • conda创建 、查看、 激活、删除 python 虚拟环境
  • 音视频项目—基于FFmpeg和SDL的音视频播放器解析(十)
  • vite+react+typescript 遇到的问题
  • 远程创建分支本地VScode看不到分支
  • stm32 HSUSB
  • vscode运行dlv报错超时
  • 用5000字讲清楚压敏电阻
  • 基础模型的自然语言处理能力综述
  • Linux tc 使用
  • 李沐的学习Pytorch环境配置
  • 【数据结构】希尔排序(最小增量排序)
  • 大数据基础设施搭建 - Hadoop
  • R语言和RStudio的下载安装(非常简便舒适)
  • LeetCode701. Insert into a Binary Search Tree
  • 欢迎各位加入知识星球,带各位进入新的领域
  • 《2020年最新面经》—字节跳动Java社招面试题
  • 腾讯云CVM服务器标准型/高IO/计算/大数据使用场景及选择说明
  • C++ 日期推算
  • AM@函数展开成幂级数@间接法@常用麦克劳林幂级数展开公式
  • QEMU显示虚拟化的几种选项
  • 解锁数据安全之门:探秘迅软DSE的文件权限控制功能