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

【LeetCode每日一题】——415.字符串相加

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时空频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 字符串

二【题目难度】

  • 简单

三【题目编号】

  • 415.字符串相加

四【题目描述】

  • 给定两个字符串形式的非负整数 num1num2 ,计算它们的和并同样以字符串形式返回。
  • 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

五【题目示例】

  • 示例 1:

    • 输入:num1 = “11”, num2 = “123”
    • 输出:“134”
  • 示例 2:

    • 输入:num1 = “456”, num2 = “77”
    • 输出:“533”
  • 示例 3:

    • 输入:num1 = “0”, num2 = “0”
    • 输出:“0”

六【题目提示】

  • 1 < = n u m 1. l e n g t h , n u m 2. l e n g t h < = 1 0 4 1 <= num1.length, num2.length <= 10^4 1<=num1.length,num2.length<=104
  • n u m 1 num1 num1 n u m 2 num2 num2 都只包含数字 0 − 9 0-9 09
  • n u m 1 num1 num1 n u m 2 num2 num2 都不包含任何前导零

七【解题思路】

  • 我们只需要模拟十进制加法的过程即可
  • 从后向前遍历两个字符串
  • 进行加法运算,并计算得到进位
  • 然后根据进位继续向下运算,得到每一对值的计算结果
  • 如果某一个加数计算完毕,对其补零继续运算,直到运算结束
  • 注意最后一次计算可能会有进位,所以需要特殊判断
  • 具体细节可以参考下面的代码
  • 最后返回结果即可

八【时空频度】

  • 时间复杂度: O ( m a x ( m , n ) ) O(max(m, n)) O(max(m,n)) m m m n n n分别为字符串1和字符串2的长度
  • 空间复杂度: O ( 1 ) O(1) O(1)

九【代码实现】

  1. Java语言版
class Solution {
    public String addStrings(String num1, String num2) {
        // 分别定义两个字符串的索引指向末尾
        int i = num1.length() - 1;
        int j = num2.length() - 1;
        // 保持进位
        int add = 0;
        // 保存结果
        StringBuilder res = new StringBuilder();
        // 字符串相加
        while (i >= 0 || j >= 0) {
            // 获取两个加数
            int temp1 = (i >= 0) ? num1.charAt(i) - '0' : 0;
            int temp2 = (j >= 0) ? num2.charAt(j) - '0' : 0;
            // 根据进位计算当前位的和
            int temp = temp1 + temp2 + add;
            // 计算进位
            add = temp / 10;
            // 计算当前位的求和值
            res.insert(0, temp % 10);
            // 向前继续求和
            i--;
            j--;
        }
        // 返回结果(注意:最后一次计算可能会有进位,需要特殊判断)
        if (add != 0) {
            res.insert(0, add);
        }
        return res.toString();
    }
}
  1. Python语言版
class Solution:
    def addStrings(self, num1: str, num2: str) -> str:
        # 分别定义两个字符串的索引指向末尾
        i = len(num1) - 1
        j = len(num2) - 1
        # 保持进位
        add = 0
        # 保存结果
        res = ""
        # 字符串相加
        while i >= 0 or j >= 0:
            # 获取两个加数
            temp1 = int(num1[i]) if i >= 0 else 0
            temp2 = int(num2[j]) if j >= 0 else 0
            # 根据进位计算当前位的和
            temp = temp1 + temp2 + add
            # 计算进位
            add = temp // 10
            # 计算当前位的求和值
            res = str(temp % 10) + res
            # 向前继续求和
            i -= 1
            j -= 1
        # 返回结果(注意:最后一次计算可能会有进位,需要特殊判断)
        return "1" + res if add else res
  1. C++语言版
class Solution {
public:
    string addStrings(string num1, string num2) {
        // 分别定义两个字符串的索引指向末尾
        int i = num1.length() - 1;
        int j = num2.length() - 1;
        // 保持进位
        int add = 0;
        // 保存结果
        string res = "";
        // 字符串相加
        while (i >= 0 || j >= 0) {
            // 获取两个加数
            int temp1 = (i >= 0) ? num1[i] - '0' : 0;
            int temp2 = (j >= 0) ? num2[j] - '0' : 0;
            // 根据进位计算当前位的和
            int temp = temp1 + temp2 + add;
            // 计算进位
            add = temp / 10;
            // 计算当前位的求和值
            res = char((temp % 10) + '0') + res;
            // 向前继续求和
            i--;
            j--;
        }
        // 返回结果(注意:最后一次计算可能会有进位,需要特殊判断)
        if (add) {
            return '1' + res;
        }
        return res;
    }
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. Python语言版
    在这里插入图片描述

  3. C++语言版
    在这里插入图片描述


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

相关文章:

  • MySQL 8.0:explain analyze 分析 SQL 执行过程
  • esp8266_TFTST7735语音识别UI界面虚拟小助手
  • Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版)
  • Qt:QMetaObject::connectSlotsByName实现信号槽自动关联
  • 电商项目-网站首页高可用(二)
  • ARP..
  • 【C++——迭代器】
  • 安科瑞能源物联网平台在老旧小区用电安全改造中的应用与优势
  • HTML+CSS+JS制作汽车网站(内附源码,含5个页面)
  • LLM与金融
  • Python绘制图表
  • SpringBoot3-第一篇(快速入门)
  • Source Insight 导入代码库 观察linux源码
  • canvas绘制仪表盘刻度盘
  • WorkManager
  • Centos8安装源出错 设置基础软件仓库出错(已解决-秒解)
  • ubuntu 安装docker
  • 【枚举】假币问题
  • 《Vue进阶教程》第十六课:深入完善响应式系统之单例模式
  • 从0到1手写实现Event Emitter
  • 关于Buildroot如何配置qtwebengine [未能成功编译]
  • 面试题整理15----K8s常见的网络插件有哪些
  • 对于其他管理的理解(中)
  • 【Flink-scala】DataSet编程模型介绍及数据源
  • Pytorch | 从零构建ParNet/Non-Deep Networks对CIFAR10进行分类
  • 在FreeRTOS中动态创建任务,假如在最后一个参数写NULL,该任务有任务句柄吗