题解 | #跳台阶扩展问题#

跳台阶扩展问题

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

使用和跳台阶一样的思路。模拟跳的过程,将n阶台阶分为第一次跳1阶,第一次跳2阶,...,第一次跳n阶。
这样就得到了一个类似于原始跳台阶的公式,f(n)=f(1)+f(2)+...+f(n-1)+1,f(n)表示n阶台阶的跳法数。
最后不是加f(n)而是加1,是因为一次跳n个台阶就直接跳完了,只有一种跳法。如果加f(n)的话会使等式不成立,使递归无出口。这个最后加1在代码中体现为返回++sum。
由于在循环中调用递归,所以时间复杂度在O(n^2),是比较大的,算法还有进一步优化的空间。

class Solution {
public:
    int jumpFloorII(int number) {
        if(number == 0){
            return 0;
        }
        else if(number == 1){
            return 1;
        }
        else if(number == 2){
            return 2;
        }
        int sum = 0;
        for(int i = 1;i < number;i++){
            sum += jumpFloorII(i);
        }
        return ++sum;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 18:22
投了几百份简历,专业和方向完全对口,都已读不回。尝试改了一下学校,果然有奇效。
steelhead:这不是很正常嘛,BOSS好的是即便是你学院本可能都会和聊几句,牛客上学院本机会很少了
点赞 评论 收藏
分享
风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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