随笔分类 - leetcode-递归
递归相关题目以及解法
摘要:链接 https://leetcode.cn/problems/number-of-islands/description/ 思路 跟岛屿周长差不多...但我觉得这个比岛屿周长还简单。不知道为什么这个算中等题目,岛屿周长算简单题目 代码 class Solution: def numIslands(
阅读全文
摘要:链接 https://leetcode.cn/problems/sum-root-to-leaf-numbers/description/ 思路 时刻记住,DFS是递归的一种。而解决递归,最朴素的思路就是:递归的定义就是递归的解。 题目要求我们求根节点到叶子结点的和,我们要提供一个值保持其状态,退出
阅读全文
摘要:问题描述 给你一个数组,生成这个数组中元素的全排列。 思路 经典的循环dfs。要点是我们需要设置visited数组来指代其是否被遍历过。 代码 class Solution: def islandPerimeter(self, grid): if not grid: return [] visite
阅读全文
摘要:链接 https://leetcode.cn/problems/island-perimeter/description/ 思路 这题理论上来讲可以用深搜广搜来做,但我第一时间没搞明白怎么做,所以就先迭代一发。 思路就是: 1. 题目给定的只有1个岛屿,那么我们可以遍历整个grid,对于发现的新岛屿
阅读全文
摘要:https://leetcode.cn/problems/sum-of-left-leaves/description/ 【分析】 该题要求左叶子之和。 如果我们对当前节点进行叶子节点的判断,那么我们是不知道当前节点是左叶子还是右叶子的。 所以我们应该在叶子结点的上层(父节点)进行判断。 【代码】
阅读全文
摘要:https://leetcode.cn/problems/binary-watch/description/ 分析 这是典型的循环DFS问题。 循环DFS一般应用在: 1. 输出字符的按位全排列。(比如一共4个数字,输出3个数字的全部组合) 2. 输出字符的全排列。(结合visited数组) 3.
阅读全文
摘要:问题链接 https://leetcode.cn/problems/decode-string/description/ 解题思路 这题一看就是个典型的递归题目,典型的递归函数的定义就是递归函数的解。 我们首先定义递归函数的参数和返回值。 递归函数的参数显然就是一个字符串,递归函数的返回值是经过计算
阅读全文
摘要:问题链接 https://leetcode.cn/problems/elimination-game/ 解题思路 这题需要推理,和约瑟夫环一样。我暂时不想去深入研究,只想用模拟。 这题其实可以用递归来解,因为他每一层的处理方式几乎一模一样。 我们首先看参数和返回值。我们期望接收到一个数组和一个fla
阅读全文
摘要:问题链接 https://leetcode.cn/problems/different-ways-to-add-parentheses/description/ 解题思路 这个题目是一个典型的递归问题,也是一个典型的分治问题。我们讲过,递归问题的定义就是递归的解。 首先我们考虑这个递归函数的定义,参
阅读全文
摘要:问题链接 https://leetcode.cn/problems/reorder-list/description/ 解题思路 这题其实用list + 双指针模拟。很简单。 但我们要练习的是递归。 这题我本来是想用递归的方式进行模拟,但出了点问题。发现如果这样实现会有循环引用问题。 本着有简单的不
阅读全文
摘要:问题链接 https://leetcode.cn/problems/powx-n/description/ 解题思路 这个题目具有缩小规模的潜质,所以可以用递归来进行解决。 为啥呢?因为幂本质上就是乘法。 2的3次幂,就是2*2*2。所以,我们要做的就是减少乘法的次数。 比如2的10次幂,它其实等于
阅读全文
摘要:题目链接 https://leetcode.cn/problems/swap-nodes-in-pairs/description/ 解题思路 首先这是个递归问题,因为它可以明显的缩小问题规模。既然是递归的问题,那我们按照递归的一般思路来。 首先,我们考虑递归函数的参数和返回值。 因为这个题目和上一
阅读全文
摘要:问题链接 https://leetcode.cn/problems/add-two-numbers/description/ 解题思路 这题是倒着存储的,也要求我们返回一个倒着的链表。 即它需要我们左对齐,相加之后向后进位,但需要我们返回最左侧的结果节点。 看起来这也是个缩小规模的问题。 首先,我们
阅读全文
摘要:问题链接 https://leetcode.cn/problems/hanota-lcci/description/ 解题思路 首先我们要定义递归函数。汉诺塔问题是典型的递归问题(缩小规模,小规模问题是大规模问题的子集),而且是典型的递归的定义就是递归的解的问题。 首先,我们定义一个汉诺塔函数,参数
阅读全文
摘要:问题描述 https://leetcode.cn/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/description/ 解决方案 首先,这题有更简洁的解法,但我的脑子不够用,我只会模拟。所以就只写模拟。 首先,按照解递归的一般思
阅读全文
摘要:问题描述 https://leetcode.cn/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof/description/ 解题思路 参考这个 代码 # Definition for singly-linked list. # class Lis
阅读全文
摘要:问题链接 https://leetcode.cn/problems/fan-zhuan-lian-biao-lcof/description/ 解题思路 参考上一个题目。 代码 class ListNode: def __init__(self, x): self.val = x self.next
阅读全文
摘要:问题链接 https://leetcode.cn/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/description/ 解题思路 首先看参数和返回值。参数为一个链表的头节点。返回值为一个逆序好的数组。 然后看本层做什么,以及怎么缩小规模。 本层要做
阅读全文
摘要:问题描述 https://leetcode.cn/problems/fibonacci-number/description/ 解题思路 最经典的递归问题,它的问题描述就是递归的。 先考虑参数和返回值。参数就是n,返回值是fib(n)的值。 然后考虑本层做什么,以及缩小规模。 根据定义,本层就是将f
阅读全文
摘要:题目链接 https://leetcode.cn/problems/power-of-four/description/ 解题思路 参考3的幂。 代码 class Solution: def isPowerOfFour(self, n: int) -> bool: if n <= 0: return
阅读全文