Leetcode66.加一

1.题目

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

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

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

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

2.解题思路

首先阅读题目理解,最简单的理解就是给定的数组末尾元素加一,然后原样输出,这个可以利用循环写出。接着要考虑9这个特殊数字,因为如果结尾数字是9的话,加一就是10,然而数组的每个元素只能储存一个数字,所以这个时候数组就要扩大从而让每个元素储存一个数字。

int i;            
for(i=digitsSize-1;i>=0;i--)
{
if(digits[i]<9) { digits[i]++; *returnSize=digitsSize; return digits;//判断数组末元素是否为9 } //不是9则扩大数组变0然后首位为1 digits[i]=0; }

加一之后可以给出一个新的数组,原来的元素加一变0;并且要让首位元素变1,就好比加法算术一样,变10进1,这里有碰见一个新的函数malloc,其为动态分配空间。最后同样利用循环输出新的数组。

  int* new = (int*) malloc ((digitsSize + 1) * sizeof (int));
               new[0] = 1;
            for(i = 1;i < (digitsSize + 1);i++)
                new[i] = 0;
            *returnSize = digitsSize + 1;
             return new;

3.代码

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* plusOne(int* digits, int digitsSize, int* returnSize)
{
              int i;
            for(i=digitsSize-1;i>=0;i--)
            {
                if(digits[i]<9)
                {
                    digits[i]++;
                    *returnSize=digitsSize;
                    return digits;//判断数组末元素是否为9
                }
                //不是9则扩大数组变0然后首位为1 
                    digits[i]=0;
            }
            int* new = (int*) malloc ((digitsSize + 1) * sizeof (int));
               new[0] = 1;
            for(i = 1;i < (digitsSize + 1);i++)
                new[i] = 0;
            *returnSize = digitsSize + 1;
             return new;
}

 

 

  

你可能感兴趣的:(Leetcode66.加一)