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;
}
运行结果截图:

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

被折叠的 条评论
为什么被折叠?



