一开始直接用的除法,一半的用例无法通过。才发现是没考虑到数组的位数超出整型范围的问题。后来百度这道题的解法,发现一开始方向就错了,应该循环判断每一位数和9的关系。
int* plusOne(int* digits, int digitsSize, int* returnSize) {
int len,i,k=0,j;long int sum=0;
int* re =(int*)malloc((digitsSize)*sizeof(int));
int* ree =(int*)malloc((digitsSize+1)*sizeof(int));
for(i=0;i<digitsSize;i++) { sum=sum*10+digits[i]; }
sum=sum+1;
while(k<digitsSize)
{re[digitsSize-1-k]=sum%10;
sum/=10;
k++;}
if(sum==0)
{* returnSize=digitsSize;
return re; }
else
{ int j;
for(j=1;j<digitsSize+1;j++) ree[j]=0;
ree[0]=sum;
* returnSize=digitsSize+1;
return ree;}
}
以下是根据搜到的解法改的:
int* plusOne(int* digits, int digitsSize, int* returnSize) {
int i;
int* ree =(int*)malloc((digitsSize+1)*sizeof(int));
for(i=digitsSize-1;i>=0;i--)
{ if(digits[i]<9)
{ digits[i]=digits[i]+1; break;}
else
{ digits[i]=0; }
}
if (digits[0]==0)
{ int j;
for(j=i;j<digitsSize+1;j++) ree[j]=0;
ree[0]=1;
* returnSize=digitsSize+1;
return ree;
}
else
{* returnSize=digitsSize;
return digits;
}
}