题目传送门:66. 加一 - 力扣(LeetCode)
题解
题目大意为给定一个高精度数字,放在数组中,要求对这个数加一并返回。
类似于高精度加低精度运算,然而这里只需加一更简单一些,因此,我们并不需像高精度加法一样把数字先翻过来,而是直接在原数上进行运算。
我们从数字的个位,也就是数组的最后一位进行加一,会遇到两种情况:需要进位和不需要进位。
对于不需要进位的情况:直接在该位置上加一,即为答案。
对于需要进位的情况:又会分出两种情况,一种是正常进位,一种是最高位需要进位。
对于正常进位的操作是先将当前位置置为0,并在高一位加1。在数组中即在该数字的前一个数字上加一,如循环中i--,然后继续判断此时的加一是可以直接加还是需要再进位。
对于最高位进位的情况,因为在数组中最高位在digits[0],无法再在其前面添加数字,所以此处我们重新定义一个vector数组,长度比原数组大1,并将最高位置为1即可。例如原数为999,那么重新定义一个长度为4的数组最高位置为1,即1000。
参考代码
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
for(int i=digits.size()-1;i>=0;i--)
{
if(digits[i]!=9)//不需进位
{
digits[i]++;
break;
}
else if(i!=0)//需要进位 且 不是最高位进位
{
digits[i]=0;
}
else//最高位需要进位
{
vector<int> ans(digits.size()+1);
ans[0]=1;
return ans;
}
}
return digits;
}
};