我的 Leetcode 程序出现了超出范围的错误
I'm getting an out of range error on my Leetcode program
所以,我正在 leetcode (https://leetcode.com/problems/plus-one/) 上开发一个相对简单的程序。我将复制以下说明:
给定一个大整数,表示为整数数组 digits,其中每个 digits[i] 是整数的第 i 个数字。这些数字按从左到右的顺序从最高有效位到最低有效位排序。大整数不包含任何前导 0。
将大整数递增 1,然后 return 生成数字数组。
示例:如果数字 = [1,2,3] 那么数字之后 = [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
以避免此错误。
所以,我正在 leetcode (https://leetcode.com/problems/plus-one/) 上开发一个相对简单的程序。我将复制以下说明:
给定一个大整数,表示为整数数组 digits,其中每个 digits[i] 是整数的第 i 个数字。这些数字按从左到右的顺序从最高有效位到最低有效位排序。大整数不包含任何前导 0。
将大整数递增 1,然后 return 生成数字数组。
示例:如果数字 = [1,2,3] 那么数字之后 = [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
以避免此错误。