千山万水总有路,勇敢迈出第一步!!!前路很难,路已过半,何言弃,言何弃
>> 算法的魅力,在于即使,知识你门清,题目给你一闷棍。
<< 有形的代码,被无形算法来回拉扯,翻滚吧,我的脑浆。
最后的套餐【6 绿 5 橙】,开始递归 ~ 九日集训,基本将语言基础内容完成,下一步,进军数据结构,无论是顺序还是链表,to be continued ...
~ 热烈祝贺 老坛算粉 Leetcode 破百题 ~ 🐎🐎🐎 突击 200 + 的路上 🐎🐎🐎
人生总有一场旅行,与 C++ 携手,说走就走~ 递归是一切高阶的⏲基石,需要反复的琢磨,但也要避免走火入魔。
常学,常新,常总结。👉 C++ 基础思想-迭代周边 👈
如何写出逻辑正确的递归算法
1. 关键是要明确函数的「定义」是什么,然后相信这个定义,利用这个定义推导出最终结果,绝不要跳入递归的细节;
2. 树相关的算法,先搞清楚当前 root 节点「该做什么」以及「什么时候做」,然后根据函数定义递归调用子节点。
- 「该做什么」:实现题目效果的关键代码
- 「什么时候做」:关键代码的位置是在前序、中序、后序的位置
一、吹逼
今日学习内容:https://bbs.youkuaiyun.com/topics/605743289
从递归开始,走向算法的不归路,待我出关,必学(血)习(洗)力扣 ~
今日最 “牛”,走完了九日集训,并大呼不过瘾。
二、晒战绩
话不多说,上图~ 👆
三、写解题报告
题解报告,只写让我有
的那道题!
>> 算法的魅力,在于,即使知识你门清,题目给你一闷棍。但有时,又很简单 ~
二叉树的类声明,我得学学 ~ 👇
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
222. 完全二叉树的节点个数:题目理解 → 节点数 = 根节点 + 左子树节点+ 右子树节点
104. 二叉树的最大深度
剑指 Offer 55 - I. 二叉树的深度:题目理解 → 深度 = 根一层 + 左子树深度+ 右子树深度
- 初始状态(n=0),解是 0;
- 任意节点(n>0)的深度 = 1 + 左子树深度+ 右子树深度;
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root == NULL) return 0;
return max(maxDepth(root->left), maxDepth(root->right)) + 1;
}
};
172. 阶乘后的零:题目理解 → 求 n! 后的 0 个数
- 初始状态(n=0),解是 0,推导 n < 5 时,解是 0;
- 任意大于 0 的自然数相乘,仅仅 2*5、10 才能产生 0,进一步推导 0 的个数等于 n! 中 5 的因子数量;
class Solution {
public:
int trailingZeroes(int n) {
if(n == 0) return 0;
return trailingZeroes(n/5) + n/5;
}
};
1342. 将数字变成 0 的操作次数:题目理解 → 通过一系列操作,将数字变成 0。返回操作次数
class Solution {
public:
int numberOfSteps(int num) {
if(num==0) return 0;
if(num&1) return 1 + numberOfSteps(num-1);
else return + numberOfSteps(num/2);
}
};
397. 整数替换:题目理解 → 将整数按照奇偶性进行替换,直到为 0,返回最小操作次数
class Solution {
public:
int integerReplacement(int n) {
if (n == 1) return 0;
if (n&1) return 2 + min(integerReplacement(n/2), integerReplacement(n/2+1));
return 1 + integerReplacement(n/2);
}
};
LCP 44. 开幕式焰火:题目理解 → 统计二叉树中,非空唯一节点个数
class Solution {
public:
// 成员变量,类似全局作用,set 集合,元素唯一性
set<int> s;
int numColor(TreeNode* root) {
if(root != NULL) {
numColor(root->left);
s.insert(root->val);
numColor(root->right);
}
return s.size();
}
};
226. 翻转二叉树:题目理解 → 将二叉树左右节点交换
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root == NULL) return {};
invertTree(root->left);
invertTree(root->right);
swap(root->left, root->right);
return root;
}
};
四、九天以后
虽然只过了九天,但我已经忘记怎么找到【万人千题】社区的了,这可能就是相见恨晚,一眼万年。九天以后 ~ 我们还在继续,一起呗 ~