变态跳台阶

变态跳台阶

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);
}
全部评论

相关推荐

05-22 09:23
门头沟学院 Java
点赞 评论 收藏
分享
lllllkin:感觉可以精简到一页简历,有些排版感觉不是必须的。 时间线越早的,你自己越熟悉的放前面。描述可以更精简些,一些问题解决感觉可以不用写具体技术栈,卖个关子,等面试官问。
点赞 评论 收藏
分享
不亏是提前批,神仙打架,鼠鼠不配了
站队站对牛:现在92都报工艺岗了
投递韶音科技等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务