牛客题解-NC1大数加法

题目

以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。

(字符串长度不大于100000,保证字符串仅由'0'~'9'这10种字符组成)

输入:

1
"1","99"

输出:

1
"100"

Tips:

1
1+99=100 

思路

分析

该题目重点在于获取当前栈中的min值。

考虑为原栈stack1,新建一个stack2栈用来维持stack1中的最小数。由于栈FILO的特性,只需要保证stack2中的栈顶元素维持在一个最小值水平即可。

实现

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
import java.util.*;


public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
// write code here
StringBuilder sb = new StringBuilder();
int i = s.length() - 1;
int j = t.length() - 1;
int carry = 0;
while(i >= 0 || j >= 0 || carry != 0){
int x = i < 0 ? 0 : s.charAt(i--) - '0';
int y = j < 0 ? 0 : t.charAt(j--) - '0';
int sum = x + y + carry;
sb.append(sum % 10);
carry = sum / 10;
}
return sb.reverse().toString();
}
}