【蓝桥杯学习】上台阶方案数问题

文章讲述了如何使用递归方法解决上楼梯问题,通过将问题拆解为走到n-1或n-2再前进,得出与斐波那契数列类似的递推关系f(n)=f(n-1)+f(n-2),并提供了Python代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

楼梯上有n阶台阶,上楼时可以一步上1阶,也可以一步上2阶,编写算法计算共有多少种不同的上楼梯的方法

思路:若n=1,有一种方案。若n=2,有2种方案(1+1和2)。若n=3,可以到了2再走一级(1+1)+1,(2)+1,也可以到了1走两级(1)+2。所以,对于n,可以拆解为走到n-1再走一级,或者走到n-2再走两级。递推方程:f(n)=f(n-1)+f(n-2),类似斐波那契数列,区别在于斐波那契数列前面是两个1。

def solution(n):
 if n==1:
          return 1
 elif n==2:
          return 2
 else:
          return solution(n-1)+solution(n-2)
#注意前面的空格

n=int(input())
print('方案数:', solution(n))#,逗号别漏写
### 蓝桥杯 C++ LeetCode 题单练习 为了帮助小白更好地准备蓝桥杯竞赛并利用LeetCode平台进行训练,以下是针对C++编程的一些建议和推荐的题单。 #### 基础语法与STL库 熟练掌握C++的基础语法是非常重要的。相较于C语言,C++提供了标准模板库(STL),这使得许多操作更加简便高效[^1]。因此,在日常练习中应注重以下几个方面: - **容器**:熟悉`vector`, `deque`, `list`, `set`, 和`map`等常用数据结构。 - **算法**:了解常用的STL算法函数如`sort()`, `binary_search()`, `find()`等。 对于不使用C++的同学,则需自行实现这些功能来达到相同的效果。 #### 推荐LeetCode简单题目列表 通过解决一些经典的LeetCode问题可以有效提升解题能力。这里列举几个适合初学者尝试的经典题目: 1. **翻转二叉树** 这是一个非常经典的数据结构操作案例。下面给出一段基于递归方法完成该任务的C++代码示例[^2]: ```cpp class Solution { public: TreeNode* invertTree(TreeNode* root) { if (!root) return nullptr; swap(root->left, root->right); invertTree(root->left); invertTree(root->right); return root; } }; ``` 2. **爬楼梯** 此问题是动态规划入门级的好例子之一。它探讨如何计算到达第n阶台阶的不同方式数量。 下面展示了一个简单的解决方案: ```cpp int climbStairs(int n) { if(n<=2)return n; vector<int> dp(n+1); dp[0]=0;dp[1]=1;dp[2]=2; for(int i=3;i<=n;i++) { dp[i] = dp[i-1]+dp[i-2]; } return dp[n]; } ``` 以上两道题目均来源于力扣网站,并附有详细的解析过程供参考学习。 #### 学习路径指南 柳若在其文档《解锁算法之门》里提供了一份详尽的学习路线图以及刷题策略建议给想要参加PAT、蓝桥杯或者LeetCode比赛的学生们作为指导材料[^3]。这份资料不仅包含了理论知识讲解还涵盖了大量实战演练的机会,非常适合用来制定个人复习计划。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值