突然想到解题也是一种创作吧==
就打开 Leet 来随便抽一题 easy 看看
文组比较笨 只能 easy 勉强解一解
415. Add Strings
收两个非负数字串 num1 与 num2
将两个字串里的数字加起来 回传加总字串
不可以用内建的储存大数字的方法 (如 BigInteger)
也不可以直接把字串转成数字
如 "11", "123" => "134"
public class Solution {
public string AddStrings(string num1, string num2) {
// make sure num1 is always >= num2 length-wise
if (num1.Length < num2.Length)
(num1, num2) = (num2, num1);
Stack<char> chars = new Stack<char>();
bool holdingTen = false;
for (int i = 0; i < num1.Length; i++) {
int sum = num1[num1.Length - 1 - i] - '0';
if (holdingTen) {
sum += 1;
holdingTen = false;
}
if (num2.Length - 1 - i >= 0) {
sum += num2[num2.Length - 1 - i] - '0';
}
if (sum >= 10) {
holdingTen = true;
sum -= 10;
}
chars.Push((char)(sum + '0'));
}
if (holdingTen)
chars.Push('1');
return new String(chars.ToArray());
}
}
一开始觉得好像可以用 char[] 存结果
长度就是 num1 跟 num2 最长长度 + 1
但是实作过程中发现算 index 太过复杂
应该写得出来,但写的过程跟成品感觉会很恶心
于是决定改成用 StringBuilder
用 StringBuilder 解出来 AC 但发现时间排名很后面
看了一下前面的榜首是用 Stack
就改成用 Stack 写,意外发现快很多
本来还以为 .ToArray() 会很惨
最快速度 128 毫秒左右,StringBuilder 就慢了 20~30 毫秒
总之学到ㄌ StringBuilder 虽然方便可是还是别乱用好
之前解题用它也是爆慢
成品 129ms 50.81% (榜首写法copy下来跑 128ms)
37.5MB 74.27%