版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33559992/article/details/85234113
题目
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例1:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
解法:
解决这个题目,刚开始的时候想了很多办法,一开始,定义了一个long long 类型的变量,将数组总的每个元素*10^n 进行累加,然后加一,然后在拆解,但是由于数组是没有数字类型限制的,所以,运行以后会出错。故舍弃。
然后,又利用了,从最后一个数组元素开始,判断是否为9,如果是,完前一个元素加1。但是,这样又会吧前面出现9的也考虑进去。因此,采用网上提供的思路:
考虑的时候,从后向前考虑。最后一项如果不为9.则直接将最后一项加一。然后退出函数。
如果最后一项为9.则将改项赋值为0.考虑前一项是否为9.不为9,则加一,退出函数,否则继续判断。如果全部为9.则需要把数组扩充一位。第一位为1.其他全部为0.
代码
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* plusOne(int* digits, int digitsSize, int* returnSize) {
int *retBuf,i = 0;
retBuf = (int*)malloc((digitsSize+1)*sizeof(int));
(*returnSize) = digitsSize;
int sum9Index = 0;
for(i = digitsSize-1; i >= 0; i--)
{
//从后往前考虑,当前元素不为9
if(digits[i] < 9)
{
digits[i]++;
return digits;//加一后,直接退出
}
digits[i] = 0;
}
//执行到此处,说明全部为9.
(*returnSize)++;
retBuf[0] = 1;
return retBuf;
}