leecode :加一

这篇博客探讨了两种不同的方法来实现整数数组表示的数字加一操作。第一种方法从低位开始处理,逐位进位,如果最高位有进位,则需要扩展数组。第二种方法同样从低位开始处理,但同时检查是否需要进位,如果在遍历过程中产生进位,会在遍历结束后处理。两种方法都涉及到数组的修改和拷贝,是数字运算和数组操作的经典问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种思路:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值