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