[11]+1 = [100]
整数数组末尾加一,从后向前依次相加并处理好进位,如果最高位有进位,就申请digitsSize+1,首选ret[0]=1,后面依次拷贝返回
如果没有进位,直接返回原数组。
int* plusOne(int* digits, int digitsSize, int* returnSize) {
int c = 1;
//依次从后往前加
for(int i = digitsSize-1; i >=0; i--){
digits[i] = digits[i] + c;
c = digits[i]/10;
//可以优化的地方,如果进位等于0,直接break, 不需要后续计算
if(c == 0)
break;
digits[i] = digits[i]%10;
}
//依次拷贝
if(c){
int * ret = calloc(digitsSize+1, sizeof(int));
ret[0] = 1;
for(int i = 1; i <= digitsSize; i++)
ret[i] = digits[i-1];
*returnSize = digitsSize+1;
return ret;
}else{
*returnSize = digitsSize;
return digits;
}
}