
递归
麻利麻利吼
这个作者很懒,什么都没留下…
展开
-
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 · 133 阅读 · 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 · 162 阅读 · 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 · 150 阅读 · 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 · 75 阅读 · 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 · 370 阅读 · 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 · 127 阅读 · 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 · 390 阅读 · 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 · 76 阅读 · 0 评论 -
2021-02-21 验证二叉搜索树
题目 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。解1 中序遍历由于二叉搜索树的中序遍历一定是一个升序的数组,因此中序遍历二叉树,并通过设置一个全局变量pNode记录遍历到的每个结点的上一个结点,如果pNode值 >= root的值,则说明不是二叉搜索树。另外,在设置一个全局变量flag,判断遍历过程种是否右上述所说情原创 2021-02-21 17:39:48 · 84 阅读 · 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 · 94 阅读 · 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 · 267 阅读 · 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 · 221 阅读 · 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 · 217 阅读 · 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 · 198 阅读 · 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 · 91 阅读 · 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 · 101 阅读 · 0 评论 -
2021-01-30 跳水板 判断平衡二叉树 二叉树变单链表
题目1 跳水板你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。返回的长度需要从小到大排列。示例 1输入:shorter = 1longer = 2k = 3输出: [3,4,5,6]解释:可以使用 3 次 shorter,得到结果 3;使用 2 次 shorter 和 1 次 longer,得到结果 4 。以此类推,得到最终结果。解:两个特殊情况原创 2021-01-30 16:10:38 · 135 阅读 · 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 · 221 阅读 · 0 评论 -
20201-1-28递归
题目1 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。示例1:输入:root = [10,5,15,3,7,null,18], low = 7, high = 15输出:32class Solution {public: int Sum;public: int rangeSumBST(TreeNode* root, int low, int high) { //若结点NULL,直接返回 if(root ==原创 2021-01-29 10:33:55 · 80 阅读 · 0 评论