对于非负整数 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
方法:逐位相加,逢十进一,分别取数字k的个位十位百位和数组的最后一位、倒数第二位等逐位相加。
class Solution {
public:
vector<int> addToArrayForm(vector<int>& num, int k) {
vector<int> res;
int flag = 0;
int sum;
for(int i = num.size()-1; i >= 0; i--) {
sum = num[i] + k%10 + flag; //逐位相加,记得进位
k /= 10;
res.push_back(sum%10);
flag = sum/10;
}
while(k>0) { //k比数组数字大的情况
sum = k%10+flag;
res.push_back(sum%10);
k /= 10;
flag = sum/10;
}
if(flag) //最后相加还有进位的话
res.push_back(1);
reverse(res.begin(), res.end());
return res;
}
};
错误记录:
1、在取整数k的个位、十位、百位方法有误,真的是好久不写代码最最简单的取数字脑子都转不过来,方法:k重复%10,除10之后再取模。345%10=5得到个位数,345/10=34,34%10=4得到十位数。
2、未考虑k大于数组数字的情况,导致数组遍历完,k剩余的部分未处理到。测试用例:A = [0], K = 23。
还是要多动手写代码,以及考虑测试用例的特殊情况。