牛客-剑指offer-跳台阶&变态跳台阶&矩形覆盖

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

虽然一眼就看出来答案,但是还是被题目里的“先后次序不同算不同的结果”给干扰了一下。居然没有一眼看出来其实就是个斐波那契数列。orz

public class Solution {
    public int JumpFloor(int target) {
        if(target==1)return 1;
        if(target==2)return 2;
        return (JumpFloor(target-1)+JumpFloor(target-2));
    }
}

再贴个别人的代码吧

class Solution {
public:
    int jumpFloor(int number) {
        if (number <= 0) {
            return 0;
        }
        if (number == 1) {
            return 1;
        }
        if (number == 2) {
            return 2;
        }
        int first = 1, second = 2, third = 0;
        for (int i = 3; i <= number; i++) {
            third = first + second;
            first = second;
            second = third;
        }
        return third;
    }
};

虽然简单也要一步一步积累


题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

第一眼看题还真被难了一下,看了下评论恍然大悟这不就是数列吗(摔)真的脑子退化了orz

因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级
跳1级,剩下n-1级,则剩下跳法是f(n-1)
跳2级,剩下n-2级,则剩下跳法是f(n-2)
所以f(n)=f(n-1)+f(n-2)+...+f(1)
因为f(n-1)=f(n-2)+f(n-3)+...+f(1)

所以f(n)=2*f(n-1)

 

public class Solution {
    public int JumpFloorII(int target) {
        if (target <= 0) return -1;
        if (target == 1) return 1;
        return 2 * JumpFloorII(target - 1);
    }
}

还有一题矩形覆盖的和跳台阶其实一毛一样,抽象分析问题的能力真是太重要了,感觉刷题有点浮躁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章