题意大概是说,一个整数存放在数组中,将这个数字加一,结果存放在原数组中,代码如下,可是加一之后,数组怎么为空?
/**
* 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没用,不知原题想用它干什么.