C++ 爬楼梯 动态规划

在爬楼梯时,每次可向上走1阶台阶或2阶台阶,问有n阶楼梯有多少种上楼的方式?
方法一:暴力搜索,回溯法

#include
class Solution
{
public:
 Solution() {}
 ~Solution() {}
 int climbStairs(int n)
 {
  if (n==1||n==2)
  {
   return n;
  }
  return  climbStairs(n - 1) + climbStairs(n - 2);
 }
};
int main()
{
 Solution solve;
 printf("%d\n",solve.climbStairs(3));
 return 0;
}

运算结果为:

3

方法二:动态规划法

#include
class Solution
{
public:
 Solution() {}
 ~Solution() {}
 int climbStairs(int n)
 {
  std::vector<int> dp(n + 3, 0); //此处为n+3是为了不需要另外处理n=0, 1, 2的特殊情况
  dp[1] = 1;
  dp[2] = 2;
  for (int i = 3; i <=n; i++)
  {
   dp[i] = dp[i - 1] + dp[i - 2];
  }
  return dp[n];
 }
};
int main()
{
 Solution solve;
 printf("%d\n", solve.climbStairs(3));
 return 0;
}

运行结果为:

3

你可能感兴趣的:(C++ 爬楼梯 动态规划)