2020-07-20LeetCodeNo.66

加一:

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

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

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]

输出: [1,2,4]

解释: 输入数组表示数字 123。

示例 2:

输入: [4,3,2,1]

输出: [4,3,2,2]

解释: 输入数组表示数字 4321。


### 解题思路

执行用时:0 ms, 在所有 C 提交中击败了100.00%的用户

内存消耗:5.7 MB, 在所有 C 提交中击败了100.00%的用户

将最后一位增加1,判断其值是否为10(产生进位),继续判断倒数第二位加上进位1后是否为10,一直循环到数组第0位,如果其也等于0,那么就需要增加一位数组位,使用tag来标记是否有增加位数的进位,如9->10增加一位数组位。我这里直接让tag=0时为没有数组增位,为1时有数组增位,这样可以直接为数组动态分配(digitsSize+tag)个单位。然后根据tag的值来分两种情况把digits中的值转移到动态数组中即可

### 代码

```c

/**

 * Note: The returned array must be malloced, assume caller calls free().

 */

int* plusOne(int* digits, int digitsSize, int* returnSize){

*returnSize=digitsSize;

int i=digitsSize-1;

int tag=0;

 digits[i]++;

while(digits[i]==10)

{

    digits[i]=0;

    if(i==0)

    {


        *returnSize+=1;

        tag=1;

        break;

    }

    digits[i-1]++;

    i--;

}

int *ret=(int*)malloc(sizeof(int)*(digitsSize+tag));

if(tag==1)

{

    ret[0]=1;

    for(int j=0;j<digitsSize;j++)

    ret[j+1]=digits[j];

}

else if(tag==0)

{

 for(int j=0;j<digitsSize;j++)

ret[j]=digits[j];

}

return ret;

}

```

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。