递归与搜索
文章平均质量分 68
yuzhang_zy
现在的我不是最好的我,未来的我才是最好的我,每一篇博客都记录着我的成长
展开
-
记忆化搜索声明数组的技巧
其实记忆化搜索还是很简单的,我们先可以写出不是记忆化搜索的写法,然后根据dfs方法中动态变化的参数来声明对应维度的数组,例如dfs方法中可以由三个动态变化的参数那么我们声明三维数组即可,参数与数组维度是一一对应的,加入了记忆化数组之后我们可以根据数组记录的值判断之前是否求解过,如果求解过那么直接返回数组的值即可,如果没有求解过那么递归求解,最后将求解的结果记录在数组对应的位置上返回即可,根据参考1083题Winndy数理解记忆化的过程。...原创 2021-10-04 16:01:17 · 186 阅读 · 0 评论 -
749 隔离病毒(递归、模拟)
1. 问题描述:病毒扩散得很快,现在你的任务是尽可能地通过安装防火墙来隔离病毒。假设世界由二维矩阵组成,0 表示该区域未感染病毒,而 1 表示该区域已感染病毒。可以在任意 2 个四方向相邻单元之间的共享边界上安装一个防火墙(并且只有一个防火墙)。每天晚上,病毒会从被感染区域向相邻未感染区域扩散,除非被防火墙隔离。现由于资源有限,每天你只能安装一系列防火墙来隔离其中一个被病毒感染的区域(一个区域或连续的一片区域),且该感染区域对未感染区域的威胁最大且保证唯一。你需要努力使得最后有部分区域不被病毒感染,如果原创 2021-09-07 23:18:45 · 278 阅读 · 0 评论 -
736 Lisp 语法解析(括号嵌套-递归)
1. 问题描述:给定一个类似 Lisp 语句的表达式 expression,求出其计算结果。表达式语法如下所示:表达式可以为整数,let 语法,add 语法,mult 语法,或赋值的变量。表达式的结果总是一个整数。(整数可以是正整数、负整数、0)let 语法表示为(let v1 e1 v2 e2 ... vn en expr),其中let语法总是以字符串"let"来表示,接下来会跟随一个或多个交替变量或表达式,也就是说,第一个变量v1被分配为表达式e1的值,第二个变量v2被分配为表...原创 2021-09-05 15:38:17 · 493 阅读 · 0 评论 -
733 图像渲染(dfs)
1. 问题描述:有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标(sr, sc)表示图像渲染开始的像素值(行 ,列)和一个新的颜色值newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。最后返回经过...原创 2021-09-04 20:28:50 · 116 阅读 · 0 评论 -
700 二叉搜索树中的搜索(递归)
1. 问题描述:给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \ 1 3和值: 2你应该返回如下子树: 2 / \ 1 3在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。来源:力扣(LeetCo...原创 2021-08-08 22:21:54 · 135 阅读 · 0 评论 -
698 划分为k个相等的子集(dfs减枝)
1. 问题描述:给定一个整数数组nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。示例 1:输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4输出: True说明: 有可能将其分成 4 个子集(5),(1,4),(2,3),(2,3)等于总和。提示:1 <= k <= len(nums) <= 160 < nums[i] < 10000来源:力扣(LeetCode)链接:http..原创 2021-08-07 09:19:32 · 202 阅读 · 0 评论 -
691 贴纸拼词(记忆化搜索、状态压缩dp)
1. 问题描述:我们给出了 N 种不同类型的贴纸。每个贴纸上都有一个小写的英文单词。你希望从自己的贴纸集合中裁剪单个字母并重新排列它们,从而拼写出给定的目标字符串 target。如果你愿意的话,你可以不止一次地使用每一张贴纸,而且每一张贴纸的数量都是无限的。拼出目标target 所需的最小贴纸数量是多少?如果任务不可能,则返回 -1。示例 1:输入:["with", "example", "science"], "thehat"输出:3解释:我们可以使用 2 个 "with" 贴纸,.原创 2021-08-06 15:57:06 · 222 阅读 · 0 评论 -
690 员工的重要性(递归)
1. 问题描述:给定一个保存员工信息的数据结构,它包含了员工唯一的 id ,重要度和直系下属的 id 。比如,员工 1 是员工 2 的领导,员工 2 是员工 3 的领导。他们相应的重要度为 15 , 10 , 5 。那么员工 1 的数据结构是 [1, 15, [2]] ,员工 2的 数据结构是 [2, 10, [3]] ,员工 3 的数据结构是 [3, 5, []] 。注意虽然员工 3 也是员工 1 的一个下属,但是由于并不是直系下属,因此没有体现在员工 1 的数据结构中。现在输入一个公司的所有员工信息原创 2021-08-06 09:56:12 · 114 阅读 · 0 评论 -
685 冗余连接 II(有向图中找环-dfs、寻找度为2的边)
1. 问题描述:在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。输入一个有向图,该图由一个有着 n 个节点(节点值不重复,从 1 到 n)的树及一条附加的有向边构成。附加的边包含在 1 到 n 中的两个不同顶点间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组edges 。 每个元素是一对 [ui, vi],用以表示有向图中连接顶点 ui 和顶点 vi 的边,其中 u.原创 2021-08-05 09:53:14 · 291 阅读 · 0 评论 -
679 24 点游戏(dfs)
1. 问题描述:你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通过*,/,+,-,(,)的运算得到 24。示例 1:输入: [4, 1, 8, 7]输出: True解释: (8-4) * (7-1) = 24示例 2:输入: [1, 2, 1, 2]输出: False注意:除法运算符/表示实数除法,而不是整数除法。例如 4 / (1 - 2/3) = 12 。每个运算符对两个数进行运算。特别是我们不能用-作为一元运算符。例如,[1, 1, 1, 1]...原创 2021-08-04 16:26:51 · 463 阅读 · 0 评论 -
671 二叉树中第二小的节点(递归)
1. 问题描述:给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为2或0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。更正式地说,root.val = min(root.left.val, root.right.val) 总成立。给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。示例 1:输入:root = [2,2,5,null,null,5,7]输出:...原创 2021-08-03 09:28:37 · 125 阅读 · 0 评论 -
669 修剪二叉搜索树(递归修改)
1. 问题描述:给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树不应该改变保留在树中的元素的相对结构(即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在唯一的答案。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。示例 1:输入:root = [1,0,2], low = 1, high = 2输出:[1,null原创 2021-08-02 22:27:57 · 144 阅读 · 0 评论 -
655 输出二叉树(递归)
1. 问题描述:在一个 m*n 的二维字符串数组中输出二叉树,并遵守以下规则:行数m应当等于给定二叉树的高度。列数n应当总是奇数。根节点的值(以字符串格式给出)应当放在可放置的第一行正中间。根节点所在的行与列会将剩余空间划分为两部分(左下部分和右下部分)。你应该将左子树输出在左下部分,右子树输出在右下部分。左下和右下部分应当有相同的大小。即使一个子树为空而另一个非空,你不需要为空的子树输出任何东西,但仍需要为另一个子树留出足够的空间。然而,如果两个子树都为空则不需要为它们留出任何空间。每...原创 2021-08-01 21:51:55 · 173 阅读 · 0 评论 -
654 最大二叉树(递归、ST表)
1. 问题描述:给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的最大二叉树定义如下:二叉树的根是数组 nums 中的最大元素。 左子树是通过数组中最大值左边部分递归构造出的最大二叉树。 右子树是通过数组中最大值右边部分递归构造出的最大二叉树。返回有给定数组nums 构建的最大二叉树 。示例 1:输入:nums = [3,2,1,6,0,5]输出:[6,3,5,null,2,0,null,null,1]解释:递归调用如下所示:原创 2021-08-01 17:27:20 · 428 阅读 · 0 评论 -
653 两数之和 IV - 输入 BST(递归、哈希表)
1. 问题描述:给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。示例 1:输入: root = [5,3,6,2,4,null,7], k = 9输出: true示例 2:输入: root = [5,3,6,2,4,null,7], k = 28输出: false示例 3:输入: root = [2,1,3], k = 4输出: true示例 4:输入: root = [2,1,3], k原创 2021-08-01 11:48:50 · 117 阅读 · 0 评论 -
652 寻找重复的子树(树的哈希)
1. 问题描述:给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。两棵树重复是指它们具有相同的结构以及相同的结点值。示例 1: 1 / \ 2 3 / / \ 4 2 4 / 4下面是两个重复的子树: 2 / 4和 4因此,你需要以列表的形式返回上述重复子树的根结点。来源:力扣(LeetCode)链接:ht...原创 2021-08-01 11:09:35 · 312 阅读 · 0 评论 -
617 合并二叉树(递归)
1. 问题描述:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点。示例1:输入:Tree 1 Tree 2 1 2 ...原创 2021-07-27 20:46:05 · 89 阅读 · 0 评论 -
606 根据二叉树创建字符串(dfs)
1. 问题描述:你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 "()" 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例 1:输入: 二叉树: [1,2,3,4] 1 / \ 2 3 / 4 输出: "1(2(4))(3)"解释: 原本将是“1(2(4)())(3())”,在你省略所有不必要的空括号对之后,它将是“1(2(4))(3)...原创 2021-07-27 16:19:41 · 102 阅读 · 0 评论 -
589 N 叉树的前序遍历(递归)
1. 问题描述:给定一个 N 叉树,返回其节点值的前序遍历 。N 叉树在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。进阶:递归法很简单,你可以使用迭代法完成此题吗?示例 1:输入:root = [1,null,3,2,4,null,5,6]输出:[1,3,5,6,2,4]示例 2:输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13原创 2021-07-26 14:46:16 · 148 阅读 · 0 评论 -
572 另一棵树的子树(树的哈希)
1. 问题描述:给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。示例 1:输入:root = [3,4,5,1,2], subRoot = [4,1,2]输出:true示例 2:输入:root = [3,4,5,1,2,null,null,nu原创 2021-07-24 20:30:18 · 184 阅读 · 1 评论 -
563 二叉树的坡度(递归计算左右子树的元素和)
1. 问题描述:给定一个二叉树,计算整个树的坡度 。一个树的节点的坡度定义即为,该节点左子树的节点之和和右子树节点之和的差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。整个树的坡度就是其所有节点的坡度之和。示例 1:输入:root = [1,2,3]输出:1解释:节点 2 的坡度:|0-0| = 0(没有子节点)节点 3 的坡度:|0-0| = 0(没有子节点)节点 1 的坡度:|2-3| = 1(左子树就是左..原创 2021-07-23 21:30:25 · 150 阅读 · 0 评论 -
559 N 叉树的最大深度(递归)
1. 问题描述:给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。示例 1:输入:root = [1,null,3,2,4,null,5,6]输出:3示例 2:输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]输出:5提原创 2021-07-23 17:36:11 · 189 阅读 · 0 评论 -
543 二叉树的直径(递归-搜索每个根节点的最大直径)
1. 问题描述:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回3, 它的长度是路径 [4,2,1,3] 或者[5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。来源:力扣(LeetCode)链接:https://leetc...原创 2021-07-22 17:20:16 · 185 阅读 · 0 评论 -
538 把二叉搜索树转换为累加树(递归-反向中序遍历)
1. 问题描述:给定一个二叉搜索树,请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键小于节点键的节点。 节点的右子树仅包含键大于节点键的节点。左右子树也必须是二叉搜索树。注意:该题目与 538:https://leetcode-cn.com/problems/convert-bst-to-greater-tree/相同示例 1:输入:[4,1,6,0,2,5,7,null,null,null,3,nul...原创 2021-07-21 23:09:37 · 143 阅读 · 0 评论 -
530 二叉搜索树的最小绝对差(递归)
1. 问题描述:给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。示例:输入: 1 \ 3 / 2输出:1解释:最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。提示:树中至少有 2 个节点。本题与 783 https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/ 相同来源:力扣(LeetCode)链接:h...原创 2021-07-21 10:42:26 · 105 阅读 · 0 评论 -
529 扫雷游戏(模拟、递归)
1. 问题描述:让我们一起来玩扫雷游戏!给定一个代表游戏板的二维字符矩阵。'M'代表一个未挖出的地雷,'E'代表一个未挖出的空方块,'B'代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字('1' 到 '8')表示有多少地雷与这块已挖出的方块相邻,'X'则表示一个已挖出的地雷。现在给出在所有未挖出的方块中('M'或者'E')的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对应的面板:如果一个地雷('M')被挖出,游戏就结束了- 把它改为'X'...原创 2021-07-21 09:42:14 · 138 阅读 · 0 评论 -
515 在每个树行中找最大值(dfs)
1. 问题描述:给定一棵二叉树的根节点root ,请找出该二叉树中每一层的最大值。示例1:输入: root = [1,3,2,5,3,null,9]输出: [1,3,9]解释: 1 / \ 3 2 / \ \ 5 3 9示例2:输入: root = [1,2,3]输出: [1,3]解释: 1 / \ 2 3示例3:输入...原创 2021-07-18 16:08:20 · 167 阅读 · 0 评论 -
513 找树左下角的值(dfs、bfs)
1. 问题描述:给定一个二叉树的根节点 root,请找出该二叉树的最底层最左边节点的值。假设二叉树中至少有一个节点。示例 1:输入: root = [2,1,3]输出: 1示例 2:输入: [1,2,3,4,null,5,6,null,null,7]输出: 7提示:二叉树的节点个数的范围是 [1,10 ^ 4]-2 ^ 31<= Node.val <= 2 ^ 31- 1来源:力扣(LeetCode)链接:https://leetcode-cn....原创 2021-07-17 21:29:38 · 149 阅读 · 0 评论 -
508 出现次数最多的子树元素和(递归)
1. 问题描述:给你一个二叉树的根结点,请你找出出现次数最多的子树元素和。一个结点的「子树元素和」定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。你需要返回出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的子树元素和(不限顺序)。示例 1:输入: 5/ \2 -3返回[2, -3, 4],所有的值均只出现一次,以任意顺序返回所有值。示例2:输入: 5/ \2 -5返回[2],只有 2 出现两次,-5 只...原创 2021-07-17 20:10:31 · 177 阅读 · 0 评论 -
501 二叉搜索树中的众数(递归-BST的中序遍历)
1. 问题描述:给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值结点右子树中所含结点的值大于等于当前结点的值左子树和右子树都是二叉搜索树例如:给定 BST [1,null,2,2], 1 \ 2 / 2返回[2].提示:如果众数超过1个,不需考虑输出顺序进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)来源...原创 2021-07-16 23:21:43 · 151 阅读 · 1 评论 -
491 递增子序列(dfs)
1. 问题描述:给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是 2 。示例:输入:[4, 6, 7, 7]输出:[[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]提示:给定数组的长度不会超过15。数组中的整数范围是[-100,100]。给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。来源:力扣(LeetCode)链接:https:.原创 2021-07-13 15:26:36 · 148 阅读 · 0 评论 -
488 祖玛游戏(记忆化搜索)
1. 问题描述:回忆一下祖玛游戏。现在桌上有一串球,颜色有红色(R),黄色(Y),蓝色(B),绿色(G),还有白色(W)。 现在你手里也有几个球。每一次,你可以从手里的球选一个,然后把这个球插入到一串球中的某个位置上(包括最左端,最右端)。接着,如果有出现三个或者三个以上颜色相同的球相连的话,就把它们移除掉。重复这一步骤直到桌上所有的球都被移除。找到插入并可以移除掉桌上所有球所需的最少的球数。如果不能移除桌上所有的球,输出 -1 。示例 1:输入:board = "WRRBBW", hand原创 2021-07-13 12:11:08 · 241 阅读 · 0 评论 -
473 火柴拼正方形(dfs剪枝)
1. 问题描述:还记得童话《卖火柴的小女孩》吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法。不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到。输入为小女孩拥有火柴的数目,每根火柴用其长度表示。输出即为是否能用所有的火柴拼成正方形。示例1:输入: [1,1,2,2,2]输出: true解释: 能拼成一个边长为2的正方形,每边两根火柴。示例2:输入: [3,3,3,3,4]输出: false解释: 不能用所有火柴拼成一个正方形。注意:给定..原创 2021-07-08 22:38:43 · 300 阅读 · 1 评论 -
450 删除二叉搜索树中的节点(递归删除节点)
1. 问题描述:给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的key对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为O(h),h 为树的高度。示例:root = [5,3,6,2,4,null,7]key = 3 5 / \ 3 6/ \ \2 4 7给定需要删除的节点值是...原创 2021-07-02 10:10:16 · 207 阅读 · 0 评论 -
427 建立四叉树(递归、二维前缀和)
1. 问题描述:给你一个 n * n 矩阵 grid ,矩阵由若干 0 和 1 组成。请你用四叉树表示该矩阵 grid 。你需要返回能表示矩阵的 四叉树 的根结点。注意,当 isLeaf 为 False 时,你可以把 True 或者 False 赋值给节点,两种值都会被判题机制接受 。四叉树数据结构中,每个内部节点只有四个子节点。此外,每个节点都有两个属性:val:储存叶子结点所代表的区域的值。1 对应 True,0 对应 False;isLeaf: 当这个节点是一个叶子结点时为 True,如原创 2021-06-28 23:22:50 · 370 阅读 · 2 评论 -
417 太平洋大西洋水流问题(dfs,二进制思想)
1. 问题描述:给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。请找出那些水流既可以流动到“太平洋”,又能流动到“大西洋”的陆地单元的坐标。提示:输出坐标的顺序不重要m 和 n 都小于150示例:来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/pacif原创 2021-06-27 15:23:26 · 169 阅读 · 0 评论 -
404 左叶子之和(递归)
1. 问题描述:计算给定二叉树的所有左叶子之和示例: 3 / \ 9 20 / \ 15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sum-of-left-leaves2. 思路分析:分析题目可以我们可以递归遍历二叉树。在递归的时候维护一个变量l用来判断当前的节点是否是左叶子节点即可。3. 代码如下:...原创 2021-06-23 22:08:42 · 128 阅读 · 1 评论 -
403 青蛙过河(记忆化搜索)
1. 问题描述:一只青蛙想要过河。 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有)。 青蛙可以跳上石子,但是不可以跳入水中。给你石子的位置列表 stones(用单元格序号升序表示),请判定青蛙能否成功过河(即能否在最后一步跳至最后一块石子上)。开始时,青蛙默认已站在第一块石子上,并可以假定它第一步只能跳跃一个单位(即只能从单元格 1 跳至单元格 2 )。如果青蛙上一步跳跃了k个单位,那么它接下来的跳跃距离只能选择为k - 1、k或k + 1 个单...原创 2021-06-23 21:06:24 · 262 阅读 · 0 评论 -
397 整数替换(递归)
1. 问题描述:给定一个正整数 n ,你可以做如下操作:如果 n 是偶数,则用 n / 2替换 n 。如果 n 是奇数,则可以用 n + 1或n - 1替换 n 。n 变为 1 所需的最小替换次数是多少?示例 1:输入:n = 8输出:3解释:8 -> 4 -> 2 -> 1示例 2:输入:n = 7输出:4解释:7 -> 8 -> 4 -> 2 -> 1或 7 -> 6 -> 3 -> 2 -> 1示原创 2021-06-22 11:06:15 · 143 阅读 · 0 评论 -
394 字符串解码(嵌套问题-递归)
1. 问题描述:给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像3a或2[4]的输入。示例 1:输入:s = "3[a]2[bc]"输出:"aaabcbc"示...原创 2021-06-21 20:34:03 · 365 阅读 · 1 评论