力扣C语言(150.14)7.14

150.逆波兰表达式

最先想到肯定是栈,我原先想用循环迭代,发现如果前面连续的数字较多(超过2个),迭代的变量就更新不了了,导致前面的数也没了。

所以还是得用栈保存每个数。

要用atoi函数正负数由字符串转化过来。

除法考虑负数如何保留整数部分,我用了floor函数,不过没用也能通过。

另外不能以字符串第一个字符判断是5种字符串,因为负数和减都是以‘-’开头。

以整个字符串为判断依据,之前要用strcmp判断是否符合。

特殊情况,一个数,直接返回。

14.最长公共前缀

看起来很简单的一道题,感觉主题算法不难,但可能性一直没完全包进去,结果做了一个多小时就看答案。真心烦òᆺó

后来按自己的代码又分类讨论,看原来代码搞得跟屎山一样,搞半天各种可能性都没包括进去,一直显示一些例子不合格。显然,盲目分类讨论(if)无效,最后用了6个if语句,4个break语句都不行。无语。

看答案吧。

char * longestCommonPrefix(char ** strs, int strsSize){

    int len=200,flag=0,i=0,j=0;

    for(i=0;i<strsSize;i++)

    len=fmin(len,strlen(strs[i]));


    if(len==0||strs==NULL)

    return "";

    if(strsSize<2)

    return strs[0];这几种是特殊情况,也很容易忽略。


    for(;;j++){

    for(i=1;i<strsSize;i++)

    if(strs[i][j]!=strs[0][j]||strs[i][j]=='\0'){

这是一段很优雅的循环,比我的好到不知道哪去。


    flag=1;

    break;}

    if(flag==1){

    *(strs[0]+j)='\0';

    break;}

    i=1;这句很容易忘,很重要的一步。

    

    }

    return strs[0];

}

 

所以说如果发现数组越界,但迟迟找不出bug,就是自己忽略了一些细节,一些情况,把例子想简单了,如果在原基础上修改,加各种if,可能任然不行,那原始思路基本上有问题,有较大的漏洞,这种时刻不要💩磕那一种算法,换一个思路。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值