变态跳台阶

变态跳台阶

http://www.nowcoder.com/questionTerminal/22243d016f6b47f2a6928b4313c85387

先来捋一下规律:
1层 1种情况-->F(1)=1
2层 两种情况 1.从一层跳上来 2.直接跳两层-->F(2)=F(1)+1
3层 三种情况 1.从一层跳上来 2.二层跳上来 3.直接跳三层-->F(3)=F(1)+F(2)+1
4层 四种情况 1.从一层跳上来 2.二层跳上来 3.三层跳上来 4.直接跳四层-->F(4)=F(1)+F(2)+F(3)+1

可以看出来规律其实很简单,一个n层台阶的跳法有F(1)+F(2)+...+F(n-1)+1种

第一种解法,用一个数组存放所有台阶的跳法:

function jumpFloorII(number)
        {
            if(number===1) return 1;
            if(number===2) return 2;
            let arr = [1,2];
            for (let i=2;i<number;i++){
                arr.push(arr.reduce(function (sum,num) {
                    return sum + num;
                })+1);
            }
            return arr.pop();
        }

然后再回过头看看之前总结的规律,可以发现一个有意思的事情:
1层 F(1)=1
2层 F(2)=F(1)+1=F(1)+F(1)=2F(1)
3层 F(3)=F(1)+F(2)+1=F(2)+(F(1)+1)+F(2)+F(2)=2
F(2)
4层 F(4)=F(1)+F(2)+F(3)+1=3*F(3)
因此也可以用递归解法:

function jumpFloorII(number)
{
    // write code here
    if (number===1) return 1;
    return 2*jumpFloorII(number-1);
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
01-17 17:00
点赞 评论 收藏
分享
01-08 09:40
中南大学 Java
苏苏加油努力:你的女神不回你消息,并且给别的男生发消息 be like
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务