目录
- 350-两个数组的交集
- 283-移动零
- 1-两数之和
- 25-K 个一组翻转链表
- 581-最短无序连续子数组
- 合并区间
- 螺旋矩阵
- 数组中相加和为0的三元组
- 数组中出现次数超过一半的数字
- 字符串出现次数的TopK问题
- 206-反转链表
- 160-相交链表
- 19-删除链表的倒数第N个节点
- 21-合并两个有序链表
- 31-下一个排列
- 链表K位翻转
- 链表排序-归并算法
- 判断链表中是否有环
- 设计LRU缓存结构
- 两个链表的第一个公共结点
- 两个链表生成相加链表
- 合并N个有序链表
- 链表内指定区间反转
大数加法
访问量:1398
一、简介
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
字符串仅由'0'~‘9’构成
要求: 空间复杂度 O(1)(仅在传入字符串上操作),时间复杂度 O(n)
二、实现
思路:数字字符串中每一位,都是由0~9之间的字符组成,进而转为为字符的加减法,0~9直接的字符ascii码值如下:
字符 | ASCII码 |
0 | 48 |
1 | 49 |
2 | 50 |
3 | 51 |
4 | 52 |
5 | 53 |
6 | 54 |
7 | 55 |
8 | 56 |
9 | 57 |
A-Z对应ascii码 65~90
a-z 对应ascii码为97~122
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * @param s string字符串 表示第一个整数 * @param t string字符串 表示第二个整数 * @return string字符串 */ func solve( s string , t string ) string { if s == "" { return t } if t == "" { return s } // write code here index1 := len(s) -1 index2 := len(t) -1 res := "" flag := uint8(0) for index1 >=0 || index2 >= 0 { var totalByte byte if index1 < 0 { totalByte = t[index2] + flag index2 = index2 - 1 }else if index2 < 0 { totalByte = s[index1] + flag index1 = index1 - 1 } else { totalByte = s[index1] + t[index2] - 48 + flag index2 = index2 - 1 index1 = index1 - 1 } // 将进位设置为0 flag = 0 // 超过9 if totalByte > 57 { totalByte = totalByte - 10 flag = flag +1 } res = string(totalByte) + res } if flag != 0 { flag = flag + 48 res = string(flag) + res } return res }
本文为原创文章,请尊重辛勤劳动,如需转载,请保留本文地址
若您感觉本站文章不错,读后有收获,不妨赞助一下?
我要赞助