自己的方法
1.第一次提交错误,没有考虑到进位。
2.考虑到进位之后,对于把数组转化成向量又出现了问题。首先分情况没有分对 应该判断进位与digits第一位之和是否为10。是则先添加1 0 然后再添加数组中0~len-2个元素,共2+len-1=len+1个数;否则与digits[i]处理方式相同,把数组元素添加到result就行
class Solution
{
public:
vector<int> plusOne(vector<int>& digits)
{
vector<int> result;
int len;
len = digits.size();
int c = 1;
int temp[len];
fill(temp,temp+len,0);
if(len == 1)
{
if(digits[len-1]<9)
{
result.push_back(digits[len-1]+1);
}
else
{
result.push_back(1);
result.push_back(0);
}
}
else
{
//没有对digits[0]进行操作,所以下面再转化到result时需要分类对digits[0]处理。
for(int i = len-1;i>0;i--)
{
temp[i] = (digits[i]+c)%10;
c = (digits[i]+c)/10;
}
if(c+digits[0] == 10)
{
//为10加一位
result.push_back(1);
result.push_back(0);
for(int j = 0;j<len-1;j++)
{
result.push_back(temp[j]);
}
}
else//否则跟digits[i]处理一样
{
temp[0] = digits[0] + c;
for(int j = 0;j<len;j++)
{
result.push_back(temp[j]);
}
}
}
return result;
}
};
别人的算法: vector不是不可以按下标添加元素吗???<C++ pirmer>P93
分为两种情况:
- 需要加位 当数为9 99 999等
- 不需要加位 当一个位置没有进位的时候,下一个位置一定不需要进位,可以直接返回;
vector<int> plusOne(vector<int>& digits)
{
int len = digits.size();
for (int i = len - 1; i >= 0; i--)
{
digits[i]++;
digits[i] %= 10;
if (digits[i] != 0)
{
return digits;
}
}
vector<int> result(len + 1);
result[0] = 1;
return result;
}
注意:digits[i] %= 10;不是求进位,而是看当前值是否需要进位,如果等与0则是有进位。