leetcode刷题日记:58. Length of Last Word 和66. Plus One

文章介绍了C语言中的函数:计算字符串最后一个词的长度和处理大整数加一及进位逻辑。

58.Length of Last Word

题目要求是给一个字符串求出最后一个词的长度,既然是最后一个词,那么我们就从最后面的非空格的字符向前面数直到遇到空格,这就是最后一个词的长度。

int lengthOfLastWord(char *s){
    int length = strlen(s)-1;
    int count = 0;
    while(s[length]==' '){ //把后面末尾的空格排除找到最后一个词
        length--;
    }
    while(s[length--]!=' '){ //从最后一个词的后面向前面计算单词长度
        count++;
        if(length<0){  //防止只有一个词的情况,将length减的小于0,这样会发生运行错误
            break;
        }
    }
    return count;
}

运行结果截图:
在这里插入图片描述

66. Plus One

我们得到的数据是一个大整数,数字的每一位被保存至数组digits中,整个digits从左到右的顺序是最高有效位到最低有效位,这个大整数不包含前导0,为这个大整数增加1,然后返回digits数组的结果。
在这个问题中加1肯定是在数字的最低位进行加1,但是加完1之后可能会出现进位的情况,如果存在进位的情况,进位之后还会不会出现进位的情况?所以一旦出现进位,就需要继续判断进位后,更高一位需不需要进位,不需要就可以结束。

int * plusOne(int *digits, int digitSize, int *returnSize){
    int max = 0;
    int i = digitSize-1;
    digits[i]+=1;
    while(digits[i]==10){  // 进位
        if(i>0){
            digits[i-1] += 1;
            digits[i] = 0;
            i--;
        }else{
            max = 1;
            digits[i] = 0;
        }
    }
    if(max){  //最高位进位后,重新分配空间
        int * p = (int *)malloc(sizeof(int)*(digitSize+1));
        p[0] = 1;
        for(int i=0;i<digitSize;i++){
            p[i+1] = digits[i];
        }
        *returnSize = digitSize+1;  //最高位进位size+1
        return p;
    }
    *returnSize = digitSize; //最高位未进位,size不变
    return digits;
}

运行结果截图:
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值