当前位置: 首页 > news >正文

算法解题有感

记录一下自己第一次在做算法题的时候把解题的思路用注释写出来,一步步推导,然后套用相应的算法实现,并且一次提交成功!!!

回看自己的解题思路,好像看到了Deepseek深度思考的影子,在此,向每天被自己叨扰的Deepseek致敬!!!

LeetCode
22. 括号生成:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。
示例 1:

输入:n = 3
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]
示例 2:

输入:n = 1
输出:[“()”]

/**
 * @param {number} n
 * @return {string[]}
 */
var generateParenthesis = function (n) {
    // 思考n和n-1有什么区别,n的话多一对括号,这对括号是否可以放在任意位置,但是要满足有效。
    // 有效的括号组合指的是左括号和右括号使用栈增减最后刚好等于0的。
    // 既然这样的话,只要通过不同方式的进栈出栈,就能找出不同的组合。
    // 以n=2举例,方式一进(,出),进(,出)。方式二进(,进(,出),出),这样就得到了2种方式。
    // 这样的话问题就转换成了进出方式的组合。n对括号的话必然会进n次,出n次,而且过程中进的次数>=出的次数
    // 想一下回溯算法,回溯算法可以用来枚举出所有可能性,回溯算法主要是尝试和回退。这里尝试有两种选择,一是进(,二是出),有点类似于二叉树左子树和右子树,可以用path记录当前括号组合,是进还是出用计数器,当进(的时候,计数器+1,当进)的时候计数器-1。
    // 剪枝的条件是,计数器<0了,不符合有效括号
    // 记录解的条件是,计数器===0,且path长度===2n

    function loop(type = '(', count = 0, path = [], res = []) {
        // 剪枝
        if (count < 0) {
            // 不符合有效括号组合
            return;
        }
        if (path.length === 2 * n) {
            // 到达最底端了
            return;
        }

        // 尝试
        path.push(type);
        if (type === '(') {
            count++;
        } else {
            count--;
        }
        // 记录解
        if (count === 0 && path.length === 2 * n) {
            res.push(path.join(''));
        }
        loop('(', count, path, res);
        loop(')', count, path, res);
        // 回退
        path.pop();
    }

    const res = [];
    loop('(', 0, [], res)
    return res;
};

相关文章:

  • Python 简单的用户权限判断
  • 使用QuickReporter将多张图片插入在word多行的表格中
  • R语言对偏态换数据进行转换(对数、平方根、立方根)
  • MFC添加免费版大漠3.1233
  • AI编程工具哪家强?对比Cusor、Copilot、Cline
  • 中医病因辨证
  • Unity Shader 学习18:Shader书写基本功整理
  • 一款超级好用且开源免费的数据可视化工具——Superset
  • Postman下载安装使用指南
  • Vue 3 + Composition API + Vite + Pinia + Element Plus 构建项目的完整指南
  • vue复习1~45
  • 数据安全与网络安全——问答复习
  • STL入门
  • SpringBoot3+Vue3开发公司库房管理系统
  • Cursor异常问题全解析-无限使用
  • 【ComfyUI】相似画绘制工作流教程
  • Ubuntu22云服务器添加2G Swap分区
  • C++中获取文件名的后缀
  • 深入探索 Python 中的 asyncio:异步编程的利器
  • es 3期 第27节-运用Script脚本实现复杂需求
  • 有哪些做软件的网站有哪些/创建自己的网址
  • 目前做网站流行的语言/网络营销与直播电商好就业吗
  • 仅有网站做app/微信怎么推广找客源
  • 福建建设培训中心网站/免费自助建站模板
  • java培训学校/长沙网站推广排名优化
  • 如何做好网站推广优化/我赢网seo优化网站