leetcode66:66. 加一
题目描述
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
Example
输入:[1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
solution idea
加法规则
- 特殊情况全9时,结果长度加一,
res[0]==1
,其它是0。 - 其它情况下,结果长度和原来容器长度一样。需要判断末尾数字是否为9。
- 小于9时,直接相加。
- 等于9时,根据进位规则找到前边第一个非9的元素加一,这个元素后边的都赋值0.
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int len=digits.size();
int idx=len-1;
bool all9=true;
for(int i=0;i<len;i++) if(digits[i]!=9) {all9=false; break;}
if (all9)
{
vector<int > res(len+1,0);
res[0]=1;
return res;
}
vector<int> res=digits;
if(digits[idx]<9) res[idx]+=1;
else
{
while((idx-1>=0) && digits[idx]==9)
{
res[idx]=0;
idx--;
}
res[idx]+=1;
}
return res;
}
};
参考文献
- c++ prime 第5版