题目描述
给定一个非负整数 X
,X
的数组形式是 X
从左到右各个数位的一个数组。例如,如果 X = 1231
,则数组形式为 [1,2,3,1]
。
给定 X
的数组形式 A
,返回整数 X+K
的数组形式。
样例
输入:A = [1,2,0,0], K = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234
输入:A = [2,7,4], K = 181
输出:[4,5,5]
解释:274 + 181 = 455
输入:A = [2,1,5], K = 806
输出:[1,0,2,1]
解释:215 + 806 = 1021
输入:A = [9,9,9,9,9,9,9,9,9,9], K = 1
输出:[1,0,0,0,0,0,0,0,0,0,0]
解释:9999999999 + 1 = 10000000000
注意
1 <= A.length <= 10000
0 <= A[i] <= 9
0 <= K <= 10000
- 如果
A.length > 1
,则A[0] != 0
算法
(模拟) $O(n)$
- 将数组
A
倒置,然后将K
加到A[0]
上。 - 从低位开始依次向前进位,如果超过了原来的数组长度,则往数组中新增加元素。
- 最后再将数组倒置返回。
时间复杂度
- 每一位仅遍历一次,故时间复杂度为 $O(n)$。
空间复杂度
- 使用了常数的空间。
C++ 代码
class Solution {
public:
vector<int> addToArrayForm(vector<int>& A, int K) {
int n = A.size();
reverse(A.begin(), A.end());
A[0] += K;
int i = 0;
while (A[i] >= 10) {
if (i >= n - 1)
A.push_back(0);
A[i + 1] += A[i] / 10;
A[i] %= 10;
i++;
}
reverse(A.begin(), A.end());
return A;
}
};