递归
麻利麻利吼
这个作者很懒,什么都没留下…
展开
-
2021-03-12 两数相加
class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { Add(l1,l2,NULL,0); return l1; } void Add(ListNode* p1,ListNode* p2,ListNode* p , int c) { ListNode* pNode; if(!p1 &&原创 2021-03-14 11:34:02 · 73 阅读 · 0 评论 -
2021-03-09 具有所有最深节点的最小子树
题目 具有所有最深节点的最小子树 给定一个根为 root 的二叉树,每个节点的深度是 该节点到根的最短距离 。 如果一个节点在 整个树 的任意节点之间具有最大的深度,则该节点是 最深的 。 一个节点的 子树 是该节点加上它的所有后代的集合。 返回能满足 以该节点为根的子树中包含所有最深的节点 这一条件的具有最大深度的节点。 示例 1: 输入:root = [3,5,1,6,2,0,8,null,null,7,4] 输出:[2,7,4] 解释: 我们返回值为 2 的节点,在图中用黄色标记。 在图中用蓝色标记原创 2021-03-09 19:35:39 · 112 阅读 · 0 评论 -
2021-03-03 所有可能的满二叉树
题目 所有可能的满二叉树 满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。 返回包含 N 个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。 答案中每个树的每个结点都必须有 node.val=0。 你可以按任何顺序返回树的最终列表。 示例: 输入:7 输出:[[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,null,null,null,nul原创 2021-03-04 11:40:27 · 95 阅读 · 1 评论 -
2020-03-01 两两交换链表中的节点
class Solution { public: ListNode* swapPairs(ListNode* head) { if(!head) return head; return getSolution(head->next , head); } ListNode* getSolution(ListNode* pNode , ListNode* pLast) { if(!pNode) return pLast;原创 2021-03-02 14:46:13 · 36 阅读 · 0 评论 -
2021-02-25 递归乘法
题目 递归乘法 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。 示例1: 输入:A = 1, B = 10 输出:10 示例2: 输入:A = 3, B = 4 输出:12 通过对两个数进行位运算,以3*4为例子 按照传统的乘法的累加方式,从左向右判断B的每一位。如果为该位0,则加0;如果为1,则加A,然后左移一位,处理B的下一位。 class Solution { public: int multiply(int A, int B) {原创 2021-02-25 14:43:42 · 321 阅读 · 0 评论 -
2021-02-24 找出克隆二叉树中的相同节点
题目 找出克隆二叉树中的相同节点 给你两棵二叉树,原始树 original 和克隆树 cloned,以及一个位于原始树 original 中的目标节点 target。 其中,克隆树 cloned 是原始树 original 的一个 副本 。 请找出在树 cloned 中,与 target 相同 的节点,并返回对该节点的引用 示例 1: 输入: tree = [7,4,3,null,null,6,19], target = 3 输出: 3(黄色结点3的引用) 解释: 上图画出了树 original 和 cl原创 2021-02-24 14:30:53 · 83 阅读 · 0 评论 -
2021-02-23 连续差相同的数字
题目 连续差相同的数字 返回所有长度为 n 且满足其每两个连续位上的数字之间的差的绝对值为 k 的 非负整数 。 请注意,除了 数字 0 本身之外,答案中的每个数字都 不能 有前导零。例如,01 有一个前导零,所以是无效的;但 0 是有效的。 你可以按 任何顺序 返回答案。 示例 1: 输入:n = 3, k = 7 输出:[181,292,707,818,929] 解释:注意,070 不是一个有效的数字,因为它有前导零。 示例 2: 输入:n = 2, k = 1 输出:[10,12,21,23,32,3原创 2021-02-23 17:35:57 · 281 阅读 · 0 评论 -
2021-02-22 跳跃游戏
题目 跳跃游戏 这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 任一 下标处。 注意,不管是什么情况下,你都无法跳到数组之外。 示例 1: 输入:arr = [4,2,3,0,3,1,2], start = 5 输出:true 解释: 到达值为 0 的下标 3 有以下可能方案: 下标 5 -> 下标 4 -> 下标 1 -> 下原创 2021-02-22 21:37:23 · 44 阅读 · 0 评论 -
2021-02-21 验证二叉搜索树
题目 验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 解1 中序遍历 由于二叉搜索树的中序遍历一定是一个升序的数组,因此中序遍历二叉树,并通过设置一个全局变量pNode记录遍历到的每个结点的上一个结点,如果pNode值 >= root的值,则说明不是二叉搜索树。 另外,在设置一个全局变量flag,判断遍历过程种是否右上述所说情原创 2021-02-21 17:39:48 · 52 阅读 · 0 评论 -
2021-02-20 最长同值路径
class Solution { int L = 0; public: int longestUnivaluePath(TreeNode* root) { if(root == NULL) return 0; int length=0; getLongest(root,root->val); return L-1; } int getLongest(TreeNode* root , int nVal)原创 2021-02-21 11:43:09 · 63 阅读 · 0 评论 -
2021-2-19 构建字典序最大的可行序列 二叉树的右视图
给你一个整数 n ,请你找到满足下面条件的一个序列: 整数 1 在序列中只出现一次。 2 到 n 之间每个整数都恰好出现两次。 对于每个 2 到 n 之间的整数 i ,两个 i 之间出现的距离恰好为 i 。 序列里面两个数 a[i] 和 a[j] 之间的 距离 ,我们定义为它们下标绝对值之差 |j - i| 。 请你返回满足上述条件中 字典序最大 的序列。题目保证在给定限制条件下,一定存在解。 一个序列 a 被认为比序列 b (两者长度相同)字典序更大的条件是: a 和 b 中第一个不一样的数字处,a 序列原创 2021-02-19 15:36:15 · 217 阅读 · 0 评论 -
2021-02-13 二叉树累加和 修剪二叉搜索树
题目 把二叉搜索树转换为累加树 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 示例 1: 输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8] 输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8] ...原创 2021-02-13 14:03:12 · 163 阅读 · 0 评论 -
2021-02-05 前序中序遍历生成树
题目 重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 示例: 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 /** * Definition for a binary tree node. * struct TreeNode { * int val原创 2021-02-07 10:34:47 · 153 阅读 · 0 评论 -
2021-02-04 至少K个重复字符的最大字串
题目1 至少K个重复字符的最大字串 找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k 。输出 T 的长度。 示例 1: 输入: s = “aaabb”, k = 3 输出: 3 最长子串为 “aaa” ,其中 ‘a’ 重复了 3 次。 解: 本题目主要通过分治+递归进行实现。主要思路如下: 遍历一遍字符串,计数每个字母出现的次数,存储到哈希表中 再遍历字符串,以次数小于k的字母作为分隔符,将字符串分割成若干部分,再分别对字串递归进行同样的操作,直到整个字符串原创 2021-02-05 14:32:09 · 145 阅读 · 0 评论 -
2021-02-02第K个语法符号
题目 第K个语法符号 在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。 给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始) 示例: 输入: N = 1, K = 1 输出: 0 输入: N = 2, K = 1 输出: 0 输入: N = 2, K = 2 输出: 1 输入: N = 4, K = 5 输出: 1 解释: 第一行: 0 第二行: 01 第三行: 0110 第四行: 01101001 解1 递归 class Solution { publi原创 2021-02-03 11:11:03 · 68 阅读 · 0 评论 -
2021-1-31 BST结点最小差 汉诺塔问题
题目1 二叉搜索树节点最小距离 给定一个二叉搜索树的根节点 root,返回树中任意两节点的差的最小值。 解 思路:由于题目给的是二叉搜索树,因此中序遍历该树可以得到有序的结点顺序。 通过标记上一节点prev,逐步取当前遍历结点-prev的值和目前最小值比较,选更小的值,最后可以获得差值最小。 解1 DFS中序递归 class Solution { int minNum = INT_MAX; TreeNode* prev = NULL; public: int minDiffInBST原创 2021-01-31 16:19:40 · 62 阅读 · 0 评论 -
2021-01-30 跳水板 判断平衡二叉树 二叉树变单链表
题目1 跳水板 你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。 返回的长度需要从小到大排列。 示例 1 输入: shorter = 1 longer = 2 k = 3 输出: [3,4,5,6] 解释: 可以使用 3 次 shorter,得到结果 3;使用 2 次 shorter 和 1 次 longer,得到结果 4 。以此类推,得到最终结果。 解: 两个特殊情况原创 2021-01-30 16:10:38 · 102 阅读 · 0 评论 -
2021-1-29斐波那契数列 青蛙跳台阶 二叉树深度
题目1 斐波那契数列 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 解法1 递归 终止条件:n=0:返回0;n=1:返回1 返回值:F(N) = F(N - 1) + F(N - 2) class Solution { public: int fib(int n) {原创 2021-01-30 16:10:04 · 187 阅读 · 0 评论 -
20201-1-28递归
题目1 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。 示例1: 输入:root = [10,5,15,3,7,null,18], low = 7, high = 15 输出:32 class Solution { public: int Sum; public: int rangeSumBST(TreeNode* root, int low, int high) { //若结点NULL,直接返回 if(root ==原创 2021-01-29 10:33:55 · 49 阅读 · 0 评论