LeetCode--初级算法--数组篇-加一

题目

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。

你可以假设除了整数 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;
}

你可能感兴趣的:(LeetCode)