[学习报告]《LeetCode零基础指南》(第九讲) 简单递归

千山万水总有路,勇敢迈出第一步!!!前路很难,路已过半,何言弃,言何弃
>> 算法的魅力,在于即使,知识你门清,题目给你一闷棍。
<< 有形的代码,被无形算法来回拉扯,翻滚吧,我的脑浆。

最后的套餐【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. 二叉树的深度:题目理解 → 深度 = 根一层 + 左子树深度+ 右子树深度

  1. 初始状态(n=0),解是 0;
  2. 任意节点(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 个数 

  1. 初始状态(n=0),解是 0,推导 n < 5 时,解是 0;
  2. 任意大于 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;
    }
};

四、九天以后

虽然只过了九天,但我已经忘记怎么找到【万人千题】社区的了,这可能就是相见恨晚,一眼万年。九天以后 ~ 我们还在继续,一起呗 ~ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老坛算粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值