这道题只需要将整数k从个位到最高位逐个加到对应向量中的位置,相加的位置是从数组最右端向最左端。因此使用了逆向迭代器reverse_iterator。
但下面的代码代码出现了问题。
while(k!=0)
{
if(it != num.begin())
{
--it;
*it += k%10;
}
else
{
num.insert(num.begin(), k%10);
}
k /= 10;
}
当k的位数多余原向量的尾数是,执行insert函数会使num向量扩容,需要重新分配地址空间,因此迭代器也会重新分配。it中的值就不是原来的num.begin()。
导致重新执行if中的代码,此时*it会导致错误。
class Solution {
public:
vector<int> addToArrayForm(vector<int>& num, int k) {
vector<int>::iterator it;
vector<int>::reverse_iterator rit;
rit = num.rbegin();
while(k!=0 && rit != num.rend()) //num扩容后迭代器重新分配
{
*rit += k%10; //
rit++;
k /= 10;
}
while(k!=0)
{
num.insert(num.begin(), k%10);
k /= 10;
}
it = num.end()-1;
while(it != num.begin())
{
if(*it >= 10)
{
*it = (*it)%10;
*(it-1) += 1;
}
it--;
}
if((*num.begin())>=10)
{
*num.begin() = (*num.begin())%10;
num.insert(num.begin(),1);
}
return num;
}
};