C++ 爬楼梯 动态规划

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

#include<stdio.h>
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<vector>
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
发布了90 篇原创文章 · 获赞 73 · 访问量 3614

猜你喜欢

转载自blog.csdn.net/weixin_44208324/article/details/105115175