网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事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时不加负号。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
转存中…(img-NykU9kS5-1715717675231)]
[外链图片转存中…(img-8gXuto61-1715717675232)]
[外链图片转存中…(img-eJ7sCDEs-1715717675232)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新