算法练习——数组形式的整数加法

2021年1月22日LeetCode每日一题为989. 数组形式的整数加法,看到这题的时候首先想到的是像小学学加法那样,上面一个数下面一个数,对应位上的数相加,大于十标记一个进位标志,每次运算的时候看看有没有进位标志,有的话需要额外加一。本着这种思路完成这一题也算是比较简单,不过比较繁琐,K全加到对应的位以后,还需要将剩下的位给填回去,填的过程中可能会发现最后一次相加运算是有进位的,需要处理进位。这里附上官方题解,这里的思路就是题解中的逐位相加,这里写的实在是过于冗余了,进位可以直接将K加上一。代码如下:

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
class Solution {
public List<Integer> addToArrayForm(int[] A, int K) {
LinkedList<Integer> ret = new LinkedList<>();
boolean upstairs = false;
int cur = A.length - 1;
while (K != 0) {
int sum = upstairs ? 1 : 0;
if (cur >= 0) {
sum += A[cur] + K % 10;
cur--;
} else {
sum += K % 10;
}
upstairs = sum >= 10;
ret.addFirst(sum % 10);
K /= 10;
}
for (int i = cur; i >= 0; i--) {
int sum = A[i];
if (upstairs) {
sum += 1;
}
upstairs = sum >= 10;
ret.addFirst(sum % 10);
}
if(upstairs) ret.addFirst(1);
return ret;
}
}

通过以后去查看题解,发现自己的写法实在是太蠢了,期待下次遇到这题的时候能够做出更加简洁的写法。到今天已经是第二十天了,初步养成了一个每日刷题并且记录思路和结果的习惯,努力成为一个具有专业精神的程序员,就像《代码整洁之道-程序员的职业素养》所说的那样。