对于非负整数 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
解析:
改了五六次才对了,真是没有想清楚就开始写代码的下场。第一次,在循环中写了K==0就break;没有考虑到jinWei后续的工作。第二次:没有考虑到K比数组长的情况。第三次:最后一次的进位插入地方有误,判断也有误。第四次:修改之后把最后一次进位落下了。第五次:忘记了对10取模,导致结果中出现为10的元素。
代码:
vector<int> addToArrayForm(vector<int>& A, int K) {
int size=A.size();
int jinWei=0;
for(int i=size-1;i>=0;i--)
{
if(K==0&&jinWei==0)//K结束且没有进位
break;
if(K!=0)//K结束后也要考虑进位
{
A[i]+=K%10+jinWei;
K/=10;
}
else
A[i]+=jinWei;
if(A[i]>=10)
{
A[i]%=10;
jinWei=1;
}
else
{
jinWei=0;
}
}
while(K>0)
{
if(jinWei+K%10>=10)
{
A.insert(A.begin(),(K%10+jinWei)%10);//注意取模
jinWei=1;
}
else
{
A.insert(A.begin(),K%10+jinWei);
jinWei=0;
}
K/=10;
}
if(jinWei==1)//最后一次进位
A.insert(A.begin(),jinWei);
return A;
}