LeetCode ClimbingStairs

1518 ワード

class Solution {

public:

    int climbStairs(int n) {

        if (n < 1) return 0;

        int a = 0;

        int b = 1;

        for (int i=0; i<n; i++) {

            int t = a + b;

            a = b;

            b = t;

        }

        return b;

    }    

};

発見leetcodeの上の問題の多くも剣指offerの中であって、この問題も、実際には1つのfab数列を計算して、1つのnに対して、1歩先に行ってもいいし、2歩先に行ってもいいので、前者はn-1の階段を残して、後者はn-2を残して、私たちがすでに求めた(n-1)と(n-2)の階段の時の種数を仮定して、この時f(n)=f(n-1)+f(n-2)