首页 > leetcode ,plusone题目怎么通过

leetcode ,plusone题目怎么通过

题意大概是说,一个整数存放在数组中,将这个数字加一,结果存放在原数组中,代码如下,可是加一之后,数组怎么为空?

/**
 * 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 i ;
    for(i = digitsSize -1; i >=0; --i)
    {
        if(9 != digits[i])
        {
            ++digits[i];
            return digits;
        }
        else
        {
            digits[i] =0;
        }   
    }
    
    if(i < 0)
    {
        digits = (int *)malloc((digitsSize+1)*sizeof(int));
        digits[0] =1;
        for(i = 1; i < digitsSize+1 ; i++)
        {
            digits[i] = 0;
        }
        return digits;
    }
}

如果你的digits[i]==9,+1后,digits[i-1]要+digits[i]/10,也就是+1.还有就是照你的意思,是每个元素只存一个0~9的数字,要是9999这种全是9的,原数组长度+1,内容保留,应该用realloc,而不是malloc.还有就是不要一上来就for循环,不管最后一位是不是9,你都要循环digitsSize次,效率很低.应该用while给定条件哪一位>9,那么前一位+1,自己变0.具体看下面代码,还有,函数里有个参数returnSize没用,不知原题想用它干什么.

int* plusOne(int* digits, int digitsSize) {
    digits[digitsSize - 1] += 1;
    int i = digitsSize - 1;
    while(digits[i] > 9 && i > 0) {
            digits[i - 1] += digits[i] / 10;
            digits[i] = 0;
            i--;
    }
    if (digits[0] > 9) {
        digits = (int *)realloc(digits, (++digitsSize) * sizeof(int));
        digits[0] /= 10;
        digits[digitsSize - 1] = 0;
    }
    for (int i = 0;i < digitsSize;i++)
        std::cout << *(digits + i) << ' ';
    return digits;
}
【热门文章】
【热门文章】