小谭的力扣刷题 2021-3-18

leetCode 算法
58题(简单)
问题描述:最后一个单词的长度
给你一个字符串 s,由若干单词组成,单词之间用空格隔开。返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0 。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
在这里插入图片描述

int lengthOfLastWord(char * s){
 int sz = strlen(s);
 if(sz>=1&&sz<=10000){
     int flag = 0;//用来标记单词后面有无空格
     int i = 0;
     int num = 0;//计算最后一个单词的数字
     //遍历字符
     for(i = 0;i<=sz;i++){
         if(*(s+i)!='\0'){//判断是否读到字符串结尾
             if(*(s+i)==' '&&flag==0){
                 flag = 1;
             }else if(*(s+i)!=' '&&flag==0){
                 num++;
             }else if(*(s+i)!=' '&&flag==1){
                 num = 1;
                 flag=0;
             }
         }
     }
       return num;
 }
return 0 ;
}

在这里插入图片描述
结论:做算法题的时候不要很快就下手,先标记处题目的细节要求,然后写下自己大概的实现思路,再动手写代码。但是自己写的是最蠢最蠢的办法,所以内存消耗的多。代码要进行优化,要拿时间换内存。

T66 加一(简单)
问题描述:给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头
在这里插入图片描述

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */

int arr(int* digits, int digitsSize){
    int i =0;
    for(i=0;i<digitsSize;i++){
        if(digits[i]>9||digits[i]<0){
            return 0;
        }
    }
    return 1;
}
int* plusOne(int* digits, int digitsSize, int* returnSize){
    if(1<=digitsSize&&digitsSize<=100&&arr(digits,digitsSize)){
    int i=0;
    for(i = digitsSize-1;i>=0;i--){
        if(digits[i]!=9){
            digits[i]=digits[i]+1;
            *returnSize = digitsSize;
            return digits;
        }
        digits[i] = 0;
    }
    *returnSize = digitsSize+1;
    digits = (int*)malloc(sizeof(int)*(*returnSize));
    for(i = 0;i<=digitsSize;i++){
        digits[i]=0;
    }
    digits[0] = 1;
    return digits;
    }
    return NULL;
}

在这里插入图片描述
结论:刚开始没有思路,看一下大佬们的评论然后开始写,第一次执行的时候总是只出来一个‘】’,还以为是自己的逻辑问题,然后查看代码。发现自己的思路是没问题的,但是函数参数中有一个returnSize的参数在我的函数中没有任何的作用,我这才想起来,函数返回的是一个指针,只能指出一个值,我得要告诉他我的数组的元素个数,他才能完整的显示出来。 但是加上后又出现了一个错误,
在这里插入图片描述
百度之后发现是因为我用来返回的tmp数组是局部变量,所以函数结束后位置会归还系统。所以我采取了动态分配的方式。
data=(ElemType*)malloc(sizeof(ElemType)*InitSize);
这种问题有以下几种解决方法。

修改方法一般有3种:
1)返回的指针提前分配空间
2)用static修饰变量
3)使用全局变量
参考:https://blog.csdn.net/weixin_42066185/article/details/108913650

来源:力扣(LeetCode)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值