【递归】(二) 递推关系

本文深入探讨了递推关系,详细解析了杨辉三角的多种求解方法,包括迭代与动态规划的优化,以及递归解法。同时,文章也介绍了链表反转问题,通过双指针和递归两种方式,阐述了高效反转链表的思路和实现。
摘要由CSDN通过智能技术生成

目录

一、递推关系

二、杨辉三角

2.1 问题描述

2.2 求解过程

三、杨辉三角 II

3.1 问题描述

3.2 求解过程

四、反转链表

4.1 题目要求

4.2 解决过程

五、反转链表


一、递推关系

参考文献:https://leetcode-cn.com/explore/orignial/card/recursion-i/257/recurrence-relation/1208/


二、杨辉三角

2.1 问题描述

2.2 求解过程

个人实现

法一:暴力迭代 + 动态规划。正常地生成各行以及行中各元素。复杂度 O(n^2)。

2020/06/18 - 9.06%

class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        if not numRows:
            return []
        if numRows == 1:
            return [[1]]
        if numRows == 2:
            return [[1],[1,1]]
        
        res = [[1],[1,1]]               # 初始化结果列表
        for line in range(2, numRows):  # 当前行行号
            temp = [1]                  # 初始化当前行头
            for j in range(1, line):    # 当前行需计算的中间元素数
                num = res[line-1][j-1] + res[line-1][j]  # 求和生成中间元素
                temp.append(num)        # 中间元素加入临时列表
            temp.append(1)              # 补充当前行尾
            res.append(temp)            # 当前行加入结果列表
        
        return res

法一改:暴力迭代 + 动态规划 改。稍作简化,思想不变。复杂度 O(n^2)。

2020/06/18 - 65.52%

class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        if not numRows:
            return []
        if numRows == 1:
            return [[1]]

        res = [[1]]                    # 初始化结果列表 res 第0行
        for line in range(numRows-1):  # 上一行 line 行号
            cur = [1]                  # 当前行 cur 行头取1
            for index in range(line):  # 当前行 cur 需计算的中间元素数
                cur.append(res[line][index] + res[line][index+1])  # 求和生成中间元素加入当前行 cur
            cur.append(1)              # 当前行 cur 行尾取1
            res.append(c
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值