lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1846 随笔 :: 0 文章 :: 109 评论 :: 288万 阅读

1.题目

 

 

 

 

https://leetcode.cn/problems/add-strings/

 

2.解法

 

思路

使用双指针从后往前遍历两个字符串,同时用一个变量 carry 来记录进位。每次计算两个字符的和,加上 carry ,然后将结果的个位数放入一个 StringBuilder 中,将结果的十位数作为新的 carry 。如果两个字符串的长度不同,可以用 0 补齐。最后,如果 carry 不为 0 ,还要将它加入 StringBuilder 中。最后,将 StringBuilder 反转并转换为字符串,就是最终的答案

这个解法的时间复杂度是 O(max(m,n)) ,其中 m 和 n 是两个字符串的长度。空间复杂度是 O(max(m,n)) ,因为需要一个额外的 StringBuilder 来存储结

 

 

我的思路是模拟竖式加法的过程。

我们从两个字符串的末尾开始,

  • 每次取出一个字符,把它们转换为数字,然后相加。
  • 如果有进位,我们把它加到下一位的和上。
  • 我们把每一位的和的个位数加到结果中,
  • 然后更新进位。

我们重复这个过程,

直到两个字符串都没有位数或进位为零。

最后,我们把结果反转,因为我们是从低位到高位计算的。

 

代码逻辑

我的思路的步骤:

  1. 初始化一个StringBuilder来存储结果,一个整数变量carry来表示进位,两个整数变量i和j来表示num1和num2的指针。
  2. 从两个字符串的末尾开始,即i = num1.length() - 1,j = num2.length() - 1。
  3. 当任一字符串还有位数或进位不为零时,执行以下操作:
    • 初始化一个整数变量sum为carry的值。
    • 如果num1还有位数,即i >= 0,则把num1.charAt(i)转换为数字并加到sum上,然后把i减一。
    • 如果num2还有位数,即j >= 0,则把num2.charAt(j)转换为数字并加到sum上,然后把j减一。
    • 把sum的个位数加到结果中,即sb.append(sum % 10)。
    • 更新进位为sum的十位数,即carry = sum / 10。
  4. 反转结果并转换为字符串,即return sb.reverse().toString()。

具体实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
    public String addStrings(String num1, String num2) {
        StringBuilder sb = new StringBuilder();
        int carry = 0; // 进位
        int i = num1.length() - 1; // num1的指针
        int j = num2.length() - 1; // num2的指针
        while (i >= 0 || j >= 0 || carry > 0) { // 当任一字符串还有位数或进位不为零时
            int sum = carry; // 当前位的和
            if (i >= 0) { // 如果num1还有位数
                sum += num1.charAt(i) - '0'; // 把字符转换为数字并加到sum上
                i--; // 移动指针
            }
            if (j >= 0) { // 如果num2还有位数
                sum += num2.charAt(j) - '0'; // 把字符转换为数字并加到sum上
                j--; // 移动指针
            }
            sb.append(sum % 10); // 把sum的个位数加到结果中
            carry = sum / 10; // 更新进位
        }
        return sb.reverse().toString(); // 反转结果并转换为字符串
    }
}

  

3.总结

posted on   白露~  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2019-04-10 web.xml中<load-on-start>n</load-on-satrt>作用
2019-04-10 JavaWeb中filter的详解及应用案例
2019-04-10 Tomcat的简单归纳总结
2019-04-10 Tomcat 配置详解和优化
2019-04-10 深入理解Tomcat
2019-04-10 Tomcat启动过程原理详解
2019-04-10 Tomcat的目录结构详细介绍(超全)
点击右上角即可分享
微信分享提示