既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
在纸上对两个整数相加的操作:将相同数位对齐,从低到高逐位相加,如果当前位和超过 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时不加负号。
public class SubString {
/\*\*
\* 若a字符串表示的数字小于b字符串表示的数字则返回true
\*
\* @param a
\* @param b
\* @return
\*/
public static boolean isLess(String a, String b) {
// 由于是大数,考虑转成字符串处理
// 长度更长的字符串,数一定更大
// 当长度一样的就去比较字典序
if (a.length() == b.length()) {
if (a.compareTo(b) < 0) {
return true;
} else if (a.compareTo(b) >= 0) {
return false;
}
}
return a.length() < b.length();
}
/\*\*
\* 大数减小数
\* @param a
\* @param b
\* @return
\*/
public static String sub(String a, String b) {
StringBuilder ans = new StringBuilder();
int borrow = 0;
![img](https://img-blog.csdnimg.cn/img_convert/417b9294be0b7b531f9c7bd2069c7873.png)
![img](https://img-blog.csdnimg.cn/img_convert/6ab9fd492f1615f9dc2a51ae40bc7ee1.png)
![img](https://img-blog.csdnimg.cn/img_convert/0d982748d403048da752225359dd3f3b.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**
转存中...(img-dFNwaoqj-1715884361251)]
[外链图片转存中...(img-lhsY75kl-1715884361252)]
[外链图片转存中...(img-Vp5Cmc6b-1715884361252)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**