今天刷数组形式的整数加法,大家有兴趣可以点上看看题目要求,试着做一下。
我的第一反应是将数组转为数字,相加,再转为数组,但无法实现的,因为题目明确说明A
的位数在10000
以内,没有那种数据类型可以储存这么大的常数。
方法:
方法是逐位相加,将K与数组元素进行相加。
·从后面加;或者从前面加
我们直接看题解吧:
审题目+事例+提示:
返回的是数组形式
思路:
把k加到数组的末尾,比如,[1,2,3+912],等于915,除以10,915%10=5,留下5,再将k=910/10,以进位的方式往左进入下一位,重复上述过程,最终得到[1,0,3,5]。
对于进位,在循环条件上,我们还要保证K要大于0,确保最后一位需要进位时,可以进位。
代码(C++):
class Solution {
public:
vector<int> addToArrayForm(vector<int>& num, int k) {
vector<int> res;
int n = num.size();
for (int i = n - 1; i >= 0 || k > 0; --i, k /= 10) {
if (i >= 0) {
k += num[i];
}
res.push_back(k % 10);
}
reverse(res.begin(), res.end());
return res;
}
};
注意:使用了vector容器,以及相关的push_back()函数,reverser()函数