diff --git a/README.md b/README.md index 82c28969..d1076aba 100644 --- a/README.md +++ b/README.md @@ -464,8 +464,6 @@ * [24.两两交换链表中的节点](./problems/0024.两两交换链表中的节点.md) * [234.回文链表](./problems/0234.回文链表.md) * [143.重排链表](./problems/0143.重排链表.md)【数组】【双向队列】【直接操作链表】 - - * [141.环形链表](./problems/0141.环形链表.md) ## 哈希表 diff --git a/problems/0090.子集II.md b/problems/0090.子集II.md index c8cb42d3..5ab881e7 100644 --- a/problems/0090.子集II.md +++ b/problems/0090.子集II.md @@ -48,7 +48,7 @@ ## C++代码 -```c++ +```CPP class Solution { private: vector> result; @@ -83,7 +83,7 @@ public: ``` 使用set去重的版本。 -```c++ +```CPP class Solution { private: vector> result; diff --git a/problems/0104.二叉树的最大深度.md b/problems/0104.二叉树的最大深度.md index cde3d460..516cf5f1 100644 --- a/problems/0104.二叉树的最大深度.md +++ b/problems/0104.二叉树的最大深度.md @@ -42,14 +42,14 @@ 1. 确定递归函数的参数和返回值:参数就是传入树的根节点,返回就返回这棵树的深度,所以返回值为int类型。 代码如下: -```c++ +```CPP int getdepth(treenode* node) ``` 2. 确定终止条件:如果为空节点的话,就返回0,表示高度为0。 代码如下: -```c++ +```CPP if (node == null) return 0; ``` @@ -57,7 +57,7 @@ if (node == null) return 0; 代码如下: -```c++ +```CPP int leftdepth = getdepth(node->left); // 左 int rightdepth = getdepth(node->right); // 右 int depth = 1 + max(leftdepth, rightdepth); // 中 @@ -66,7 +66,7 @@ return depth; 所以整体c++代码如下: -```c++ +```CPP class solution { public: int getdepth(treenode* node) { @@ -83,7 +83,7 @@ public: ``` 代码精简之后c++代码如下: -```c++ +```CPP class solution { public: int maxdepth(treenode* root) { @@ -99,7 +99,7 @@ public: 本题当然也可以使用前序,代码如下:(**充分表现出求深度回溯的过程**) -```c++ +```CPP class solution { public: int result; @@ -122,7 +122,7 @@ public: } int maxdepth(treenode* root) { result = 0; - if (root == 0) return result; + if (root == NULL) return result; getdepth(root, 1); return result; } @@ -133,7 +133,7 @@ public: 注意以上代码是为了把细节体现出来,简化一下代码如下: -```c++ +```CPP class solution { public: int result; @@ -171,7 +171,7 @@ public: c++代码如下: -```c++ +```CPP class solution { public: int maxdepth(treenode* root) { @@ -218,7 +218,7 @@ public: c++代码: -```c++ +```CPP class solution { public: int maxdepth(node* root) { @@ -235,7 +235,7 @@ public: 依然是层序遍历,代码如下: -```c++ +```CPP class solution { public: int maxdepth(node* root) { diff --git a/problems/0129.求根到叶子节点数字之和.md b/problems/0129.求根到叶子节点数字之和.md index 7f50c885..696042a8 100644 --- a/problems/0129.求根到叶子节点数字之和.md +++ b/problems/0129.求根到叶子节点数字之和.md @@ -1,7 +1,8 @@ -## 链接 +# 129. 求根节点到叶节点数字之和 + [力扣题目链接](https://leetcode-cn.com/problems/sum-root-to-leaf-numbers/) -## 思路 +# 思路 本题和[113.路径总和II](https://programmercarl.com/0112.路径总和.html#_113-路径总和ii)是类似的思路,做完这道题,可以顺便把[113.路径总和II](https://programmercarl.com/0112.路径总和.html#_113-路径总和ii) 和 [112.路径总和](https://programmercarl.com/0112.路径总和.html#_112-路径总和) 做了。 @@ -15,7 +16,7 @@ 那么先按递归三部曲来分析: -### 递归三部曲 +## 递归三部曲 如果对递归三部曲不了解的话,可以看这里:[二叉树:前中后递归详解](https://programmercarl.com/二叉树的递归遍历.html) @@ -107,7 +108,7 @@ path.pop_back(); // 回溯 ``` **把回溯放在花括号外面了,世界上最遥远的距离,是你在花括号里,而我在花括号外!** 这就不对了。 -### 整体C++代码 +## 整体C++代码 关键逻辑分析完了,整体C++代码如下: @@ -160,7 +161,7 @@ public: **我这里提供的代码把整个回溯过程充分体现出来,希望可以帮助大家看的明明白白!** -## 其他语言版本 +# 其他语言版本 Java: diff --git a/problems/0132.分割回文串II.md b/problems/0132.分割回文串II.md index dbd830d0..f9cbd618 100644 --- a/problems/0132.分割回文串II.md +++ b/problems/0132.分割回文串II.md @@ -142,7 +142,8 @@ for (int i = 1; i < s.size(); i++) { 就是其实这两道题目的代码: -* 647.回文子串 + +* [647. 回文子串](https://programmercarl.com/0647.回文子串.html) * 5.最长回文子串 所以先用一个二维数组来保存整个字符串的回文情况。 diff --git a/problems/0463.岛屿的周长.md b/problems/0463.岛屿的周长.md index 609c25a5..fd9585d2 100644 --- a/problems/0463.岛屿的周长.md +++ b/problems/0463.岛屿的周长.md @@ -1,5 +1,5 @@ +# 463. 岛屿的周长 -## 题目链接 [力扣题目链接](https://leetcode-cn.com/problems/island-perimeter/) ## 思路 diff --git a/problems/0494.目标和.md b/problems/0494.目标和.md index 87fc579d..c24ce6f9 100644 --- a/problems/0494.目标和.md +++ b/problems/0494.目标和.md @@ -158,7 +158,7 @@ dp[j] 表示:填满j(包括j)这么大容积的包,有dp[i]种方法 有哪些来源可以推出dp[j]呢? -不考虑nums[i]的情况下,填满容量为j - nums[i]的背包,有dp[j - nums[i]]种方法。 +填满容量为j - nums[i]的背包,有dp[j - nums[i]]种方法。 那么只要搞到nums[i]的话,凑成dp[j]就有dp[j - nums[i]] 种方法。 diff --git a/problems/0841.钥匙和房间.md b/problems/0841.钥匙和房间.md index caa0edaf..d281dc5a 100644 --- a/problems/0841.钥匙和房间.md +++ b/problems/0841.钥匙和房间.md @@ -25,12 +25,7 @@ 示例 1: * 输入: [[1],[2],[3],[]] * 输出: true -* 解释: -我们从 0 号房间开始,拿到钥匙 1。 -之后我们去 1 号房间,拿到钥匙 2。 -然后我们去 2 号房间,拿到钥匙 3。 -最后我们去了 3 号房间。 -由于我们能够进入每个房间,我们返回 true。 +* 解释: 我们从 0 号房间开始,拿到钥匙 1。 之后我们去 1 号房间,拿到钥匙 2。 然后我们去 2 号房间,拿到钥匙 3。 最后我们去了 3 号房间。 由于我们能够进入每个房间,我们返回 true。 示例 2: * 输入:[[1,3],[3,0,1],[2],[0]] diff --git a/problems/二叉树理论基础.md b/problems/二叉树理论基础.md index 94a0d67f..b25f3be1 100644 --- a/problems/二叉树理论基础.md +++ b/problems/二叉树理论基础.md @@ -8,7 +8,9 @@ # 二叉树理论基础篇 -我们要开启新的征程了,大家跟上! +题目分类大纲如下: + +二叉树大纲 说道二叉树,大家对于二叉树其实都很熟悉了,本文呢我也不想教科书式的把二叉树的基础内容在啰嗦一遍,所以一下我讲的都是一些比较重点的内容。 @@ -179,11 +181,6 @@ struct TreeNode { **说道二叉树,就不得不说递归,很多同学对递归都是又熟悉又陌生,递归的代码一般很简短,但每次都是一看就会,一写就废。** - - - - - ## 其他语言版本 diff --git a/problems/动态规划理论基础.md b/problems/动态规划理论基础.md index fd7977a6..bd46586f 100644 --- a/problems/动态规划理论基础.md +++ b/problems/动态规划理论基础.md @@ -6,6 +6,12 @@

欢迎大家参与本项目,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!

+# 动态规划理论基础 + +动态规划刷题大纲 + + + ## 什么是动态规划 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。 @@ -122,20 +128,6 @@ 今天我们开始新的征程了,你准备好了么? -## 其他语言版本 - - -Java: - - -Python: - - -Go: - - - - ----------------------- * 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw) * B站视频:[代码随想录](https://space.bilibili.com/525438321) diff --git a/problems/回溯算法理论基础.md b/problems/回溯算法理论基础.md index 29981c66..c351ddba 100644 --- a/problems/回溯算法理论基础.md +++ b/problems/回溯算法理论基础.md @@ -6,10 +6,15 @@

欢迎大家参与本项目,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!

+# 回溯算法理论基础 -> 可以配合我的B站视频:[带你学透回溯算法(理论篇)](https://www.bilibili.com/video/BV1cy4y167mM/) 一起学习! +## 题目分类大纲如下: -# 什么是回溯法 +回溯算法大纲 + +可以配合我的B站视频:[带你学透回溯算法(理论篇)](https://www.bilibili.com/video/BV1cy4y167mM/) 一起学习! + +## 什么是回溯法 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 @@ -19,7 +24,7 @@ **所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数**。 -# 回溯法的效率 +## 回溯法的效率 回溯法的性能如何呢,这里要和大家说清楚了,**虽然回溯法很难,很不好理解,但是回溯法并不是什么高效的算法**。 @@ -31,7 +36,7 @@ 此时大家应该好奇了,都什么问题,这么牛逼,只能暴力搜索。 -# 回溯法解决的问题 +## 回溯法解决的问题 回溯法,一般可以解决如下几种问题: @@ -52,7 +57,7 @@ 记住组合无序,排列有序,就可以了。 -# 如何理解回溯法 +## 如何理解回溯法 **回溯法解决的问题都可以抽象为树形结构**,是的,我指的是所有回溯法的问题都可以抽象为树形结构! @@ -63,7 +68,7 @@ 这块可能初学者还不太理解,后面的回溯算法解决的所有题目中,我都会强调这一点并画图举相应的例子,现在有一个印象就行。 -# 回溯法模板 +## 回溯法模板 这里给出Carl总结的回溯算法模板。 @@ -149,7 +154,7 @@ void backtracking(参数) { 如果从来没有学过回溯算法的录友们,看到这里会有点懵,后面开始讲解具体题目的时候就会好一些了,已经做过回溯法题目的录友,看到这里应该会感同身受了。 -# 总结 +## 总结 本篇我们讲解了,什么是回溯算法,知道了回溯和递归是相辅相成的。 @@ -163,17 +168,6 @@ void backtracking(参数) { -## 其他语言版本 - - -Java: - - -Python: - - -Go: - diff --git a/problems/贪心算法理论基础.md b/problems/贪心算法理论基础.md index fdb7abf3..9c131709 100644 --- a/problems/贪心算法理论基础.md +++ b/problems/贪心算法理论基础.md @@ -9,8 +9,10 @@ # 关于贪心算法,你该了解这些! -> 正式开始新的系列了,贪心算法! -通知:一些录友表示经常看不到每天的文章,现在公众号已经不按照发送时间推荐了,而是根据一些规则乱序推送,所以可能关注了「代码随想录」也一直看不到文章,建议把「代码随想录」设置星标哈,设置星标之后,每天就按发文时间推送了,我每天都是定时8:35发送的,嗷嗷准时,哈哈。 +题目分类大纲如下: + +贪心算法大纲 + ## 什么是贪心 @@ -88,22 +90,6 @@ - - -## 其他语言版本 - - -Java: - - -Python: - - -Go: - - - - ----------------------- * 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw) * B站视频:[代码随想录](https://space.bilibili.com/525438321)