对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。
给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。
示例 1:
输入:A = [1,2,0,0], K = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234
解释 2:
输入:A = [2,7,4], K = 181
输出:[4,5,5]
解释:274 + 181 = 455
示例 3:
输入:A = [2,1,5], K = 806
输出:[1,0,2,1]
解释:215 + 806 = 1021
示例 4:
输入: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
分析:两数相加,暂时只想到两个方法,第一个就是数学方法,第二个就是将两个int都转化为数组的运算,第二种的话可以省去进位的麻烦。
我自己做的比较蠢,是很蠢。。。 先写下来把,以后再改
把两个int都转化为vector,然后判断哪个vector的size大(就是怕数组溢出的情况),然后取size小的vector B对应每个位都和另外一个vector A累加,并且存在另外的A上
随后,我们再对那个vector A 进行进位处理
因为代码里面有reverse处理,所以从i(i=0)位开始处理,只有当前位>=10,A[i+1]++; 随后当遇到899+311这种情况,也就是三个位不够存,需要多开一个,就新开一个vector C,进行进位的处理。
这方法估计很蠢很蠢(捂脸
class Solution {
public:
vector<int> addToArrayForm(vector<int>& A, int K) {
vector<int> B;
while (K > 10) {
int temp = K % 10;
B.push_back(temp);
K = K / 10;
}
B.push_back(K);
reverse(A.begin(),A.end());
if (A.size() >= B.size()) {
}
else {
vector<int> C;
C = A;
A = B;
B = C;
}
for (int i = 0; i < B.size(); i++) {
A[i] = B[i] + A[i];
}
vector<int> C;
for(int i = 0;i<A.size();i++){
if ( i == A.size()-1 && A[i] >= 10) {
C.resize(A.size() + 1);
C[C.size()-1] = 1;
A[i] = A[i] % 10;
for (int i = 0; i < A.size(); i++) {
C[i] = A[i];
}
reverse(C.begin(),C.end());
return C;
}
if (A[i] >= 10) {
A[i + 1]++;
A[i] = A[i] % 10;
}
}
reverse(A.begin(),A.end());
return A;
}
};