LintCode(easy)111.爬楼梯(bug集)

来源:互联网 发布:数据库应用有什么用 编辑:程序博客网 时间:2024/05/16 19:32

bug1:
这里写图片描述
原因:完全没考虑n可能为奇数,以及n=1的情况。
bug2(bug1的进阶):
这里写图片描述
原因:对n==2,规律同样不适用。
bug3(bug2进阶):
这里写图片描述
原因:此时我终于发现我的思路上的bug了,我的原意是算出跨的次数最多和最少的值,然后所有可能性都在这两者中间,所以w=n-n/2+2;(n为偶数情况下)。但是我忽略了当跨的次数相同时,跨法有很多种,比如2-2-1,1-2-2,2-1-2。
之后,我换了一种思路:以n==5为例,
次数最多:5个1
次数最少:2个2和1个1
所以我想从5个1到3个1,再到1个1,逐层挑选两个1,组合成2。
bug4:
这里写图片描述
原因:c++里2乘以i,不能直接写成2i,而是要写成2*i;
bug5:
这里写图片描述
原因:
1.有一部分重复了。,就我代码而言,我没有排除掉在之前已经变成2的数了,这些2在我的代码里会被当成1,进行下一次逐层合并。
2.w一开始不应该为pow(2,….), w应该==0;
3.两个1是相邻的
bug6:
这里写图片描述
原因:在逐层合并时,两个1的内部顺序不重要,所以应该相关代码应该除2,改动处见bug7.
bug7:
这里写图片描述

原因:
1.依旧没有注意到“两个1必须是相邻的”
2.有重复,比如:a,b,c,d,e(均为1), 我的算法是(2*5-2)/2,这种算法是基于我这种思路:以b为核心,有(a,b)和(b,c)两种可能,以c为核心,有(b,c)和(c,d)两种可能,此时(b,c)重复了(注意与bug6的原因不同)。
3.同时我还意识到我这种思路的不足,由于“两个1必须是相邻的”,所以在合并的过程中,如果出现:2-1-2-1-1. 则两个2之间的1就必须舍弃,然而我的算法并没有排除掉这种情况,这样一来这种算法显得过于麻烦,我可能考虑舍弃它。

0 0