【leetcode】415. 字符串相加

简介: 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注意:num1 和num2 的长度都小于 5100.
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。


注意:


num1 和num2 的长度都小于 5100.

```num1 和num2 都只包含数字 0-9.```

```num1 和num2 都不包含任何前导零。```

你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。


思路:


1.把字符串以“,”分成数组;

2.将2个数值,再分为数组;

3.将两个数组倒置;

4.按顺序一一做和,超过10,下一位加1

5.将result[0]==0,的数值去掉;

6.将result2转为字符串;


1.示例:


var str= "123";
var str2 ="234";
2.拆分为数组:
arr1 = ['1','2','3'];
arr2 =['2','3','4'];
3.反序
arr1 = ['3','2','1'];
arr2 =['4','3','2'];
4.数组对应项相加,满10前一位加1,删掉当前位的十位:
result = ['7','5','3'];
5.数组反序,转字符串,结果相加
result = '357'
实现代码:
var addStrings = function(num1, num2) {
   /* 将数字转化为数组,并反序*/
   let arr1 = num1.split("").reverse();
   let arr2 = num2.split("").reverse();
   /* 判断两个数组的长度 */
   if (arr1.length >= arr2.length) {
       var result = [];
       result[0] = 0;
       for (var i = 0; i <= arr1.length - 1; i++) {
           if (arr2[i] == null) {
               arr2[i] = 0;
           }
           /* 将结果相加,满10向前一位进1,并减去当前的值的十位 */
           result[i] = result[i] + Number(arr1[i]) + Number(arr2[i]);
           if (result[i] >= 10) {
               result[i] = result[i] - 10;
               result[i + 1] = 1;
           } else {
               result[i + 1] = 0;
           }
       }
   } else {
       var result = [];
       result[0] = 0;
       for (var i = 0; i <= arr2.length - 1; i++) {
           if (arr1[i] == null) {
               arr1[i] = 0;
           }
           result[i] = result[i] + Number(arr1[i]) + Number(arr2[i]);
           if (result[i] >= 10) {
               result[i] = result[i] - 10;
               result[i + 1] = 1;
           } else {
               if (i + 1 <= arr2.length - 1) {
                   result[i + 1] = 0
               }
           }
       }
   }
   result = result.reverse()
   if (result[0] == 0) {
       result.shift(0);
   }
   var result2 = '';
   for (let i = 0; i < result.length; i++) {
       result2 = result2 + result[i];
   }
   return result2;
};
相关文章
|
1月前
|
Go 索引
【LeetCode 热题100】394:字符串解码(详细解析)(Go语言版)
本文详细解析了 LeetCode 热题 394:字符串解码。题目要求对编码字符串如 `k[encoded_string]` 进行解码,其中 `encoded_string` 需重复 `k` 次。文章提供了两种解法:使用栈模拟和递归 DFS,并附有 Go 语言实现代码。栈解法通过数字栈与字符串栈记录状态,适合迭代;递归解法则利用函数调用处理嵌套结构,代码更简洁。两者时间复杂度均为 O(n),但递归需注意栈深度问题。文章还总结了解题注意事项及适用场景,帮助读者更好地掌握字符串嵌套解析技巧。
55 6
|
2月前
|
存储 机器学习/深度学习 缓存
🚀 力扣热题 394:字符串解码(详细解析)(Go语言版)
文章提供了两种解法:栈结构和递归解法。栈解法通过维护数字栈与字符串栈,依次处理 `[` 和 `]`,构造解码结果;递归解法则利用函数调用逐层解析嵌套结构。两者时间复杂度均为 $O(n)$,空间复杂度也为 $O(n)$。栈解法直观易懂,适合初学者;递归解法优雅简洁,适合处理深度嵌套规则。掌握这两种方法,可灵活应对类似问题,提升解题能力。
96 11
|
7月前
|
JavaScript
力扣3333.找到初始输入字符串Ⅱ
【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
73 1
|
7月前
|
C++
Leetcode第43题(字符串相乘)
本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
56 9
|
7月前
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
77 0
|
7月前
【LeetCode 22】459.重复的子字符串
【LeetCode 22】459.重复的子字符串
67 0
|
7月前
【LeetCode 20】151.反转字符串里的单词
【LeetCode 20】151.反转字符串里的单词
53 0
|
7月前
【LeetCode 19】541.反转字符串II
【LeetCode 19】541.反转字符串II
48 0
|
7月前
【LeetCode 18】6.2.反转字符串
【LeetCode 18】6.2.反转字符串
49 0
|
9月前
|
存储 算法
LeetCode第43题字符串相乘
LeetCode第43题"字符串相乘"的解题方法,通过使用数组存储乘积并处理进位,避免了字符串转换数字的复杂性,提高了算法效率。
LeetCode第43题字符串相乘

热门文章

最新文章

下一篇
阿里云OSS
OSZAR »