标签:
You are climbing a stair case. It takes n steps to reachto the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways canyou climb to the top?
HideTags
#pragma once #include<iostream> using namespace std; //法1:递归穷举,超时 int climbStairs1(int n) { if (n == 0) return 1; else if (n < 0) return 0; return climbStairs1(n - 1) + climbStairs1(n - 2); } //法2:动态规划。最后一步可能为1可能为2,即Ai=Ai-1 + Ai-2,斐波那契 int climbStairs2(int n) { if (n < 3) return n; int n1 = 1; int n2 = 2; for (int i = 3; i <= n; i+=2) { n1 = n1 + n2; n2 = n1 + n2;//二步长求斐波那契 } if (n%2) return n1; return n2; } void main() { cout << climbStairs2(6) << endl; cout << climbStairs1(6) << endl; system("pause"); }
70.Climbing Stairs(法1递归穷举法2动态规划)
标签:
原文地址:http://blog.csdn.net/hgqqtql/article/details/43415755