Python入门<1>爬楼梯

本文探讨了经典的爬楼梯问题,通过动态规划的方法来高效地计算出到达楼梯顶部的不同方式数量。针对传统递归方法中存在大量重复计算的问题,提出了一种使用列表存储中间结果的解决方案。

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

爬楼梯

假设你现在正在爬楼梯,楼梯有 n 级。每次你只能爬 1 级或者 2 级,那么你有多少种方法爬到楼梯的顶部?

输入格式

第一行输入一个整数 n(1n50),代表楼梯的级数。

输出格式

输出爬到楼梯顶部的方法总数。

样例输入
5
样例输出
8

难点:在利用动态规划过程中,重复计算过多

解决方法:利用列表存储当前计算结果,避免重复计算

代码(Python3+):

def test(num):
    global l
    if num==0 or num==1:
        return 1
    if num>1:
        if l[num-2]==0:
            l[num-2] = test(num-2)
            return test(num-2) + test(num-1)
        return test(num-1)+l[num-2]
    return 0
num = int(input())
l = [int(k-k) for k in range(num)]
print(test(num))
### Python算法入门经典练习题目推荐 对于初学者来说,掌握一些经典的Python算法练习题是非常重要的。这些题目可以帮助理解基本的数据结构、控制流以及算法设计的思想。 #### 1. 排序与查找类问题 排序和查找是最常见的算法主题之一。以下是几个典型的例子: - **冒泡排序** 实现一个简单的冒泡排序算法,用于对数组中的元素按升序排列[^3]。 ```python def bubble_sort(arr): n = len(arr) for i in range(n): for j in range(0, n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] return arr ``` - **二分查找** 编写一个函数,在已排序的列表中找到目标值的位置[^4]。 ```python def binary_search(arr, target): low, high = 0, len(arr) - 1 while low <= high: mid = (low + high) // 2 if arr[mid] == target: return mid elif arr[mid] < target: low = mid + 1 else: high = mid - 1 return -1 ``` --- #### 2. 字符串处理类问题 字符串操作是编程中最常用的技能之一。以下是一些典型的问题: - **反转字符串** 给定一个字符串,将其字符顺序颠倒并返回新字符串[^1]。 ```python def reverse_string(s): return s[::-1] ``` - **判断回文字符串** 检查输入的字符串是否为回文(正读反读都相同)[^5]。 ```python def is_palindrome(s): return s == s[::-1] ``` --- #### 3. 数组与矩阵操作类问题 数组和矩阵的操作涉及许多实际应用,也是面试常考的内容。 - **二维数组转置** 将一个二维数组进行行列互换[^2]。 ```python def transpose(matrix): return [[matrix[j][i] for j in range(len(matrix))] for i in range(len(matrix[0]))] ``` - **移除重复项** 从列表中删除所有重复的元素,并保持原始顺序。 ```python def remove_duplicates(lst): seen = set() result = [] for item in lst: if item not in seen: seen.add(item) result.append(item) return result ``` --- #### 4. 动态规划与递归类问题 动态规划是一种高效的解决问题的方法,而递归则是其常用的技术手段。 - **斐波那契数列** 计算第n个斐波那契数。 ```python def fibonacci(n): if n <= 1: return n a, b = 0, 1 for _ in range(2, n+1): a, b = b, a+b return b ``` - **爬楼梯问题** 假设一个人每次可以走一步或者两步台阶,问有多少种不同的方式爬上n级台阶。 ```python def climb_stairs(n): if n <= 2: return n prev1, prev2 = 1, 2 for _ in range(3, n+1): current = prev1 + prev2 prev1, prev2 = prev2, current return prev2 ``` --- #### 5. 数据结构相关问题 熟悉数据结构有助于解决更复杂的算法问题。 - **链表反转** 定义一个单向链表节点类Node,并实现链表反转功能。 ```python class Node: def __init__(self, value=0, next=None): self.value = value self.next = next def reverse_linked_list(head): prev = None curr = head while curr: temp = curr.next curr.next = prev prev = curr curr = temp return prev ``` - **栈的应用——括号匹配** 验证一组括号序列是否合法。 ```python def isValid(s): stack = [] mapping = {')': '(', '}': '{', ']': '['} for char in s: if char in mapping.values(): stack.append(char) elif char in mapping.keys(): if stack and stack[-1] == mapping[char]: stack.pop() else: return False return not stack ``` --- ### 总结 以上列举了几大类别的Python算法入门必刷题型,涵盖了排序、查找、字符串处理、数组操作、动态规划以及数据结构等内容。通过不断实践这些问题,能够显著提升算法思维能力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值