我的 Leetcode 程序出现超出范围的错误



所以,我正在做一个相对简单的leetcode程序(https://leetcode.com/problems/plus-one/)。我将复制下面的描述:
给定一个大整数,表示为整数数组digits,其中每个数字[I]是整数的第I位。数字按从左到右的顺序从最高有效到最低有效。大整数不包含前导0

将大整数加1并返回结果数组

示例:如果digits =[1,2,3],则后面的digits =[1,2,4],因为123 + 1 = 124。

无论如何,我的代码适用于我尝试过的所有输入,除了,当数组由所有9组成时。我不知道为什么,但我得到一个超出范围的错误:

terminate called after throwing an instance of 'std::out_of_range'
what():  vector::_M_range_check: __n (which is 0) >= this->size() (which is 0)

我知道我的代码到目前为止可能不是最优的,但在我尝试任何优化之前,我想把它弄对。我将在下面包含我的代码:

class Solution {
public:
vector<int> plusOne(vector<int>& digits) 
{ 
if(digits.at(digits.size()-1) < 9)
{
digits.at(digits.size()-1) += 1;
}
else
{
int zeroCount = 0;
int index = 0;
for(int i = digits.size()-1; i >= 0;--i)
{
if(digits.at(i) == 9)
{
digits.pop_back();
zeroCount++;
}
else
{
index = i;
break;
}
}
if(digits.at(index) < 9)
{
digits.at(index) += 1;
for(int i = 0; i < zeroCount; ++i)
{
digits.push_back(0);
}
}
else
{
digits.push_back(1);
for(int i = 0; i < zeroCount; ++i)
{
digits.push_back(0);
}
}
}
return digits;
}
};

如果所有元素都是9,则所有元素将被这部分删除:

if(digits.at(i) == 9)
{
digits.pop_back();
zeroCount++;
}

执行该操作后,条件digits.at(index) < 9失效。
此条件应为!digits.empty() && digits.at(index) < 9以避免此错误。

最新更新