第一种思路:
int* plusOne(int* digits, int digitsSize, int* returnSize){
int i=0;
int* arr=NULL;
int ret=0,div=0,j=-1;
ret=(digits[digitsSize-1]+1)%10;//先处理最低位的进位和余位
div=(digits[digitsSize-1]+1)/10;
digits[digitsSize-1]=ret;
for(i=digitsSize-2;i>=0;i--){//之后处理前面的位
digits[i]+=div;
ret=digits[i]%10;
div=digits[i]/10;
digits[i]=ret;
}
if(div){//判断到最高位是否有进位,有的话,数组长度需要+1,首位元素应该位进位
*returnSize=digitsSize+1;
arr=(int*)calloc(sizeof(int),(*returnSize));
arr[0]=div;
}
else{
*returnSize=digitsSize;
arr=(int*)calloc(sizeof(int),(*returnSize));
}
j=*returnSize-digitsSize;//通过两数组只差来确定copy数组的起始位置
for(int k=0;k<digitsSize;k++){
arr[j]=digits[k];
j++;
}
return arr;
}
第二种思路:
int* plusOne(int* digits, int digitsSize, int* returnSize){
int i=0;
int* arr=NULL;
int ret=0,div=1,j=-1;
for(i=digitsSize-1;i>=0;i--){
if((digits[i]+div)/10==1){//判断最后一位是否产生进位,
digits[i]=0;
div=1;
}
else{
digits[i]+=div;
div=0;
}
}
if(div){//遍历完原数组,看是否产生进位
*returnSize=digitsSize+1;
arr=(int*)calloc(sizeof(int),(*returnSize));
arr[0]=div;
j=1;
for(int k=0;k<digitsSize;k++){
arr[j]=digits[k];
j++;
return arr;
}
}
*returnSize=digitsSize;//没有产生进位就原数组进行返回
return digits;
}