66. Plus One

[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;      
    }
}

你可能感兴趣的:(66. Plus One)