
递归
递归是一种神奇的思想,当你理解之后,你会惊叹于它的奇妙
AAS48
一起学算法
展开
-
剑指 Offer 16. 数值的整数次方(思路妙)
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。原创 2022-09-16 13:49:53 · 121 阅读 · 0 评论 -
Leetcode 669. 修剪二叉搜索树
给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在 唯一的答案。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。递归即可,不用想复杂了。原创 2022-09-10 14:42:21 · 94 阅读 · 0 评论 -
Leetcode 1261. 在受污染的二叉树中查找元素(简单递归)
【代码】Leetcode 1261. 在受污染的二叉树中查找元素(简单递归)原创 2022-09-02 16:13:39 · 226 阅读 · 0 评论 -
654. 最大二叉树 (递归)
每次递归,找到当前数组的最大值,创建一个最大值节点。然后通过左递归和右递归,分别拿到左右子树创建好的结果即可。给定一个不重复的整数数组 nums。输出:[6,3,5,null,2,0,null,null,1]递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。和树相关的题都和递归离不开关系。创建一个根节点,其值为 nums 中的最大值。输入:nums = [3,2,1,6,0,5]返回 nums 构建的 最大二叉树。原创 2022-08-20 14:29:53 · 208 阅读 · 0 评论 -
Leetcode 目标和(递归)
例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1”。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。输入:nums = [1,1,1,1,1], target = 3。给你一个整数数组 nums 和一个整数 target。输入:nums = [1,0], target = 1。解释:一共有 5 种方法让最终目标和为 3。因为存在大量子问题,所以递归实现。解释:+0和-0算两种。...原创 2022-08-13 16:35:46 · 225 阅读 · 0 评论 -
小技巧:二分法模板总结
【问题描述】随机输入一个1–100以内的数x,让你设计一个程序来找这个x【思路】直接暴力时间复杂度就是O(n)了,即一个一个顺序的找。今天我们用时间复杂度仅为O(lgn)的二分法来找。说起二分,其实我很少用这个东西,因为每次都可以直接顺序搜,谁又愿意去多写个算法二分搜呢?说白了就是懒。。。但现在我发现,这个东西在很多算法题中都有涉及,关键时刻如果不加上,很容易超时。而且,二分作为一种典型...原创 2019-03-16 15:36:40 · 293 阅读 · 0 评论 -
LeetCode: 279. 完全平方数(递归思想,DP解决)
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.【思路】dp题其实就是递归题,我其实很讨厌说动态规划这个名词,因为给人一种很晦涩难懂的感觉。动规的...原创 2019-03-13 13:19:10 · 1080 阅读 · 0 评论 -
LeetCode: 650. 只有两个键的键盘(递归)
最初在一个记事本上只有一个字符 ‘A’。你每次可以对这个记事本进行两种操作:Copy All (复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的)。Paste (粘贴) : 你可以粘贴你上一次复制的字符。给定一个数字 n 。你需要使用最少的操作次数,在记事本中打印出恰好 n 个 ‘A’。输出能够打印出 n 个 ‘A’ 的最少操作次数。示例 1:输入: 3输出: 3...原创 2019-03-13 20:10:27 · 351 阅读 · 0 评论 -
LeetCode606.根据二叉树创建字符串(递归)
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例 1:输入: 二叉树: [1,2,3,4] 1 / \ 2 3 / 4 输出: "1(2(4))(3)"解释: 原本将是“1...原创 2019-07-10 15:46:52 · 367 阅读 · 0 评论 -
LeetCode:5147. 递减元素使数组呈锯齿状(递归)
【问题描述】:给你一个整数数组 nums,每次 操作 会从中选择一个元素并 将该元素的值减少 1。如果符合下列情况之一,则数组 A 就是 锯齿数组:每个偶数索引对应的元素都大于相邻的元素,即 A[0] > A[1] < A[2] > A[3] < A[4] > …或者,每个奇数索引对应的元素都大于相邻的元素,即 A[0] < A[1] > A[2]...原创 2019-08-04 14:26:21 · 329 阅读 · 0 评论 -
LeetCode: 对称二叉树(树的递归)
【问题描述:】对称二叉树给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。示例: 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3【思路】:刚看这道题...原创 2019-08-09 18:29:11 · 150 阅读 · 0 评论 -
天梯赛习题:树的遍历(后序中序建树,分治思想,注意细节)
L2-006 树的遍历 (25 分)给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:72 3 1 ...原创 2019-03-15 17:49:32 · 907 阅读 · 1 评论 -
天梯赛习题:福到了(递归打印)
L1-054 福到了 (15 分)“福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N × N 的网格组成的,网格中的元素或者为字符 @ 或者为空格。而倒过来的汉字所用的字符由裁判指定。输入格式:输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 N (不超过100的正整数),其间以 1 个空格分隔;随后 N 行,...原创 2019-03-15 15:28:48 · 2521 阅读 · 0 评论 -
递归练习题:骰子游戏(类似上楼梯,简单递归)
【问题描述】玩家根据骰子点数决定走的步数,骰子为1走1步,为n走n步,现在要求玩家走到第n步时总共有多少种走法。(1&lt;= n &lt;= 6)比如n = 6我们站在最后一次的角度上看,我们是可以0号位置掷6点直接到达,也可以从先掷1点再掷5点。。。总而言之,我只可能从n - 1, n - 2,。。。n - 6这六个位置一步到达代码:#include&lt;iostream&gt;...原创 2019-02-28 14:28:27 · 1270 阅读 · 0 评论 -
DP练习题:求解幸运数问题(递归思想,动规解决)
【问题描述】小明同学学习了不同的进制之后,拿起了一些数字做起了游戏。小明同学知道,在日常生活中我们最常用的是十进制数,而在计算机中,二进制数也很常用。现在对于一个数字x,小明同学定义出了两个函数f(x)和g(x)。 f(x)表示把x这个数用十进制写出后各个数位上的数字之和。如f(123)=1+2+3=6。 g(x)表示把x这个数用二进制写出后各个数位上的数字之和。如123的二进制表示为11110...原创 2019-02-28 15:44:03 · 3006 阅读 · 1 评论 -
递归思想:(倒序输出,问年龄)
题目简单,我们着重讨论递归思想1.【问题描述】给定一个正整数n,要你用递归算法倒序输出它比如n = 12345好,那么我们来用递归思考。倒序输出的结果是54321, 也就是说,如果我们能倒序输出1234,那么在这个基础上我们在前面输出一个5不就可以了吗?这就把问题化小了。所以,我才设f(n)表示倒序输出nf(n) = 输出n % 10 + f(n / 10)就可以了代码:/*递归...原创 2019-02-28 20:54:22 · 805 阅读 · 0 评论 -
递归训练:素因子分解(分析子问题)
【问题描述】给定某个正整数 N,求其素因子分解结果输入格式:输入long int范围内的正整数 N。输出格式:按给定格式输出N的素因式分解表达式,即 N=p1k1*p2k2*…*pm^km,其中pi为素因子并要求由小到大输出,指数ki为pi的个数;当ki为1即因子pi只有一个时不输出ki。输入样例:1323输出样例:1323=3^3 * 7^2【思路】本题你当然可以用循环暴力...原创 2019-03-01 21:50:34 · 3087 阅读 · 0 评论 -
递归训练:(1.打印沙漏,2.波兰国旗问题)
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。输入格式:输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔...原创 2019-03-02 00:32:22 · 1054 阅读 · 0 评论 -
DP训练:最长对称子串(回文串,区间dp)
L2-008 最长对称子串 (25 分)对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&amp;TAP symmetric?,最长对称子串为s PAT&amp;TAP s,于是你应该输出11。输入格式:输入在一行中给出长度不超过1000的非空字符串。输出格式:在一行中输出最长对称子串的长度。输入样例:Is PAT&amp;TAP symmetric?输出样...原创 2019-03-02 16:01:45 · 316 阅读 · 0 评论 -
递归训练:1.个位数统计,2.十进制转二进制输出(分析子问题)
【问题描述】L1-003 个位数统计 (15 分)给定一个 k 位整数 ,请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。输入格式:每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。输出格式:对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M...原创 2019-03-02 16:41:07 · 421 阅读 · 0 评论 -
递归训练:到底有多二(简单递归)
L1-017 到底有多二 (15 分)一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。输入格式:输入第一行给出一个不超...原创 2019-03-02 18:12:48 · 255 阅读 · 0 评论 -
天梯赛习题:L1-039 古风排版 (递归,有坑点)
L1-039 古风排版 (20 分)中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。输入格式:输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。输出格式:按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。输入样例:4This is a test case...原创 2019-03-09 15:53:29 · 608 阅读 · 0 评论 -
LeetCode: 486. 预测赢家(区间思想,递归)
给定一个表示分数的非负整数数组。 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端拿取分数,然后玩家1拿,……。每次一个玩家只能拿取一个分数,分数被拿取之后不再可取。直到没有剩余分数可取时游戏结束。最终获得分数总和最多的玩家获胜。给定一个表示分数的数组,预测玩家1是否会成为赢家。你可以假设每个玩家的玩法都会使他的分数最大化。示例 1:输入: [1, 5, 2]输出: Fa...原创 2019-03-14 15:43:19 · 631 阅读 · 1 评论 -
递归练习题:求解n阶螺旋矩阵问题(经典)
【问题描述】创建n阶螺旋矩阵并输出。输入样例:4输出:1 2 3 412 13 14 511 16 15 610 9 8 7【思路】:二月份的最后一天了,今天一定要多刷点题。好,言归正传。本题其实没那么简单,首先,你得看明白题,它要求的是创建n阶螺旋矩阵并输出,而不是我一开始想的直接用递归函数输出。也就是说,我们是先用递归函数将螺旋矩阵放入到一个二维数组中去之后再输出 !如果像......原创 2019-02-28 14:02:50 · 11682 阅读 · 4 评论