您的位置:首页 > 其它

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

2016-07-21 16:30 267 查看
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就必须舍弃,然而我的算法并没有排除掉这种情况,这样一来这种算法显得过于麻烦,我可能考虑舍弃它。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: