给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。
1. 从后向前找,末位非0直接加1;末位为9则改为0,若前一位非9则加1返回,若前一位为9则加至非9返回;若为99形式,首位置1末位加0。
vector<int> plusOne(vector<int>& digits) {
int num = digits.size();
if(digits[num-1] != 9)
{
digits[num-1]++;
return digits;
}
for(int i = num-1; i >= 0; i--)
{
if(digits[i] == 9)
digits[i] = 0;
else{
digits[i] ++;
return digits;
}
}
digits.insert(digits.begin(), 1);
return digits;
}
2. 从后向前,找到第一个不为9的数,该位+1,该位后的数均变为0;未找到的话,说明该数全为9,则返回 1 加 digits.size()个0
vector<int> plusOne(vector<int>& digits) {
int len=digits.size();
for(int i=len-1;i>=0;i--) {
if(digits[i]!=9)
{
digits[i]+=1;
for(int j=i+1;j<len;j++)
digits[j]=0;
return digits;
}else
continue;
}
vector<int> ans(len, 0);
ans.insert(ans.begin(),1);
return ans;
}
3. 判断进位法
vector<int> plusOne(vector<int>& digits) {
int i=0;
int size=digits.size();//记录当前容量大小
for(i=size-1;i>=0;i--)
{
digits[i]++;
digits[i]=digits[i]%10;//进位
if(digits[i]!=0)//若无进位则返回
return digits;
}
if(i==-1) //处理99,999类数字情况
{
digits.insert(digits.begin(),1);
}
return digits;
}
来源:CSDN
作者:Azanulbizar
链接:https://blog.csdn.net/qq_39823579/article/details/104575650