牛客算法题 NC1 - 大数加法

前言

1
2
1、后疫情时代,伴随着互联网行业的衰退,移动端开发岗急剧的减少。
2、当前环境下,研发人员的竞争尤其激烈,算法,成为研发人员的基础课。

知识点

  • 字符串

描述

  • 以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
  • 数据范围: s.length, t.length ≤ 100000
  • 要求:时间复杂度 O(n)

示例1

  • 输入:”1”, “99”
  • 返回值:”100”
  • 说明:1+99=100

示例2

  • 输入:”114514”, “”
  • 返回值:”114514”

思路

  • 这是典型的字符串遍历问题
  • 从右至左对字符串进行遍历相加求和,注意的是进位
  • 由于字符串长度不一定相同,最好是插0来保持长度的一致性

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string 字符串
*/
function solve(s, t) {
// 拿到两字符串的最大长度
let maxLen = Math.max(s.length, t.length);
// 对两字符串前面补0,保持长度一致
s = s.padStart(maxLen, '0');
t = t.padStart(maxLen, '0');
// 以字符串作为 res 返回
let res = '';
// 注意进位
let offset = 0;
while (maxLen > 0) {
// 字符串转字符,可以直接通过 +、- 等符号转换
let x = +s[maxLen - 1];
let y = +t[maxLen - 1];
// 在求值时一定要注意进位
let v = x + y + offset;
if (v > 9) {
v -= 10;
offset = 1;
} else {
offset = 0;
}
res = v + res;
maxLen--;
}
if (offset > 0) res = offset + res;
return res;
}

总结

  • 1、通过 padStartpadEnd 方法可以在字符串前后插入字符,方便字符串长度对齐
  • 2、通过 s[index] 可以直接获取到字符串 index 对应的字符
  • 3、通过 +-*/% 等可以直接将字符串转为数字


牛客算法题 NC1 - 大数加法
http://jxr202.github.io/algorithm/nowcoder_001-f79300e3fca4/
作者
Jiang
发布于
2023年6月7日
许可协议