2024年最全LeetCode 415,跟我一起手写EventBus吧

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

+ [模拟](#_217)

LeetCode 415. 字符串相加(10进制)

题目

在这里插入图片描述

在这里插入图片描述

模拟

只需要对两个大整数模拟「竖式加法」的过程。竖式加法就是平常学习生活中常用的对两个整数相加的方法

在纸上对两个整数相加的操作:将相同数位对齐,从低到高逐位相加,如果当前位和超过 10,则向高位进一位

因此只要将这个过程用代码写出来即可

class Solution {
    public String addStrings(String num1, String num2) {
        // 双指针分别指向末尾,即最低位,add代表进位
        int i = num1.length() - 1, j = num2.length() - 1, add = 0;
        StringBuffer ans = new StringBuffer();
        while (i >= 0 || j >= 0 || add != 0) {
            // 对位数较短的数字进行补零操作
            int x = i >= 0 ? num1.charAt(i) - '0' : 0;
            int y = j >= 0 ? num2.charAt(j) - '0' : 0;
            int result = x + y + add;
            ans.append(result % 10);
            add = result / 10;
            i--;
            j--;
        }
        // 计算完以后的答案需要翻转过来
        ans.reverse();
        return ans.toString();
    }
}

  • 时间复杂度:

O

(

max

(

len

1

,

len

2

)

)

O(\max(\textit{len}_1,\textit{len}_2))

O(max(len1​,len2​)),其中

len

1

=

num

1

.

length

\textit{len}_1=\textit{num}_1.\text{length}

len1​=num1​.length,

len

2

=

num

2

.

length

\textit{len}_2=\textit{num}_2.\text{length}

len2​=num2​.length。竖式加法的次数取决于较大数的位数。

  • 空间复杂度:

O

(

n

)

O(n)

O(n)。在 Java 解法中使用到了 StringBuffer,故 Java 解法的空间复杂度为

O

(

n

)

O(n)

O(n)。

补充:字符串相加(36进制)

题目

在这里插入图片描述

模拟

掌握十进制的大数相加后,那本题只需要注意将10变成36,以及36进制字符与数值的转换。

使用了getChar(int n)getInt(char ch)两个辅助函数来完成36进制字符与数值的转换

// 数值 -> 36进制字符
public char getChar(int n) {
    if (n <= 9) {
        return (char)(n + '0');
    } else {
        return (char)(n - 10 + 'a');
    }
}
// 36进制字符 -> 数值
public int getInt(char ch) {
    if ('0' <= ch && ch <= '9') {
        return ch-'0';
    } else {
        return ch-'a'+10;
    }
}
public String add36Strings(String num1, String num2) {
    char[] chars1 = num1.toCharArray();
    char[] chars2 = num2.toCharArray();
    // 双指针分别指向末尾,即最低位
    int i = chars1.length - 1;
    int j = chars2.length - 1;
    // 进位
    int carry = 0;
    StringBuilder sb = new StringBuilder();
    while (i >= 0 || j >= 0 || carry != 0) {
        // 对位数较短的数字进行补零操作
        int x = i >= 0 ? getInt(chars1[i]) : 0;
        int y = j >= 0 ? getInt(chars2[j]) : 0;
        int sum = x + y + carry;
        sb.append(getChar(sum % 36));
        carry = sum / 36;
        i--;
        j--;
    }
    // 计算完以后的答案需要翻转过来
    sb.reverse();
    return sb.toString();
}

补充:字符串相减(10进制)

题目

在这里插入图片描述

模拟

两个非负整数相减的结果可能为负。

因此,首先比较两个数的大小。由于是大数,肯定不能直接转成int比较。可以比较两个字符串的长度。长度更长的字符串,数一定更大;当长度一样的就去比较字典序。

当小减大时,需将两个参数调换一下位置执行减法,在结果前填上负号即可注意:结果为0时不加负号。

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

转存中…(img-NykU9kS5-1715717675231)]
[外链图片转存中…(img-8gXuto61-1715717675232)]
[外链图片转存中…(img-eJ7sCDEs-1715717675232)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值