【递归,搜索与回溯算法篇】专题(一) - 递归

【递归,搜索与回溯算法篇】专题(一) - 递归
在这里插入图片描述

文章目录

面试题 08.06. 汉诺塔问题

题目链接:面试题 08.06. 汉诺塔问题
题目描述:

在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
(1) 每次只能移动一个盘子;
(2) 盘子只能从柱子顶端滑出移到下一根柱子;
(3) 盘子只能叠在比它大的盘子上。

请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。

你需要原地修改栈。

示例 1:

输入:A = [2, 1, 0], B = [], C = []
输出:C = [2, 1, 0]

示例 2:

输入:A = [1, 0], B = [], C = []
输出:C = [1, 0]

提示:

A 中盘子的数目不大于 14 个。


题目解析:

  • 小规模问题分析

N = 1时:直接移动

//将盘子直接从a移动到c a -> c 
在这里插入图片描述


N = 2时:先将最小的盘子从a移到b,再将大盘从a移到c,再将小盘从b移到c。

//先把小盘子从a移动到b a -> b //再把大盘子从a移动到c a -> c //最后把小盘子从b移动到c b -> c 
在这里插入图片描述


N = 3时:先将前两个盘子借助c从a移动到b,再将最大的盘子移动到c,将前两个盘子借助a从b移动到c。

//将前两个盘子从a移动到b(借助c) a -> c a -> b c -> b //将最大的盘子从a移动到c a -> c //将b上面的两个盘子从b移动到c(借助a) b -> a b -> c a -> c 
在这里插入图片描述
  • 这道题为什么可以使用递归?
    解决大问题时出现了相同的子问题,在解决子问题时又出现了相同的子问题。
  • 如何编写递归代码?
    1.重复子问题 -> 函数头
    函数头:将x柱子上的一堆盘子,借助y柱子,转移到z柱子上。n代表盘子的数量
    void dfs(x , y , z , int n )
    2.只关心某一个子问题在做什么 -> 函数体
    函数体:
    将x柱子上的n-1个盘子借助z柱子放到y柱子上
    dfs(x , z , y , n-1)
    将x柱子最大的盘子放到z柱子上
    x.back() -> z
    将y柱子上的n-1个盘子借助x盘子放到z柱子上
    dfs(y , x , z , n-1)
    当剩最后一个盘子时,直接从a柱子移动到c柱子
    x.back -> z

代码实现:

classSolution{ public:voidhanota(vector<int>& A, vector<int>& B, vector<int>& C){ dfs(A,B,C,A.size());}voiddfs(vector<int>& A, vector<int

Read more

绿联云NAS配置webdav

绿联云NAS配置webdav

前言         zotero使用webdav服务时使用绿联自带的webdav服务只能使用http协议,并且只能在局域网内传输,故而尝试自行配置,以期实现公网文献同步。 注:非专业,自己在配置的时候也是根据前人的分享实现的,可能有很多不准确的地方,请见谅。 1. 大致思路         购买域名(腾讯云)→配置DDNS-go(docker)→获取SSL证书(乐此加密)→配置natfrp(docker) ①域名:固定域名,后续内网穿透时可以使用自定义域名; ②DDNS-go:自动更新域名解析到公网IP; ③SSL证书:https协议需要; ④natfrp:内网穿透需要,这里使用的是Sakura Frp。 2.参考文献 (31 封私信 / 80 条消息) 绿联 NAS 域名直连 DDNS-Go+IPv6 内网穿透并开启 HTTPS - 知乎https://zhuanlan.zhihu.com/p/

By Ne0inhk

M2LOrder轻量级WebUI部署:7861端口图形界面+无浏览器插件依赖开箱即用

M2LOrder轻量级WebUI部署:7861端口图形界面+无浏览器插件依赖开箱即用 1. 引言:让情感分析变得触手可及 你有没有遇到过这样的场景? * 想快速分析用户评论的情感倾向,却不想写复杂的代码 * 需要批量处理大量文本的情感分类,但手动操作太耗时 * 希望有一个直观的界面来查看情感分析结果,而不是面对冷冰冰的API响应 如果你有这些需求,那么M2LOrder的WebUI界面就是为你准备的。这是一个基于Gradio构建的轻量级图形界面,专门为情绪识别和情感分析服务设计,最大的特点就是开箱即用——不需要安装任何浏览器插件,打开网页就能用。 今天我要分享的就是如何快速部署和使用这个WebUI服务。它运行在7861端口,提供了从模型选择到批量分析的完整功能,而且整个过程简单到只需要几条命令。无论你是开发者、产品经理,还是数据分析师,都能在几分钟内上手。 2. M2LOrder是什么? 2.1 核心功能 M2LOrder是一个专门做情绪识别和情感分析的服务。简单来说,你给它一段文字,它就能告诉你这段文字表达的是高兴、悲伤、愤怒还是其他情绪,并且给出一个置信度分

By Ne0inhk

【n8n入门教程08】n8n 触发节点完全指南:定时器、Webhook 和手动触发

n8n工作流分享:商业级别的5个实用自动化工作流分享,诚意满满 n8n 触发节点完全指南:定时器、Webhook 和手动触发 在 n8n 自动化平台中,触发节点是工作流的起点,决定了整个流程的启动方式。无论是定时任务、外部事件还是手动测试,合理选择和配置触发节点,是实现高效自动化的基础。今天就来详细讲讲 n8n 的三类主流触发节点,帮你灵活应对各种业务场景。 手动触发节点(Manual Trigger) Manual Trigger 节点主要用于开发和调试阶段。把它放在工作流起点后,可以通过编辑器的 “Execute Workflow” 按钮手动启动流程,实时观察结果。 这个节点不会自动运行,也无法被外部事件触发,只有在你手动执行时才会生效。特别适合测试用途,你可以通过它手动运行整个流程,验证逻辑和数据流是否符合预期。 使用场景: * 开发调试新工作流 * 测试工作流的各个节点 * 验证数据流转是否正确 注意事项: * 一个工作流只能有一个 Manual Trigger 节点 * 仅在开发调试时使用,生产环境应该用其他触发器

By Ne0inhk
微信小程序webview postmessage通信指南

微信小程序webview postmessage通信指南

需求概述 在微信小程序中使用 web-view 组件与内嵌网页进行双向通信,主要通过 postMessage 实现。以下是完整的配置和使用方法: 通信指南 微信小程序webview官方文档 1. 基础配置 小程序端配置 // app.json 或 page.json { "usingComponents": {}, "permission": { "scope.webView": { "desc": "用于网页和小程序通信" } } } 网页端配置 <!-- 内嵌网页需引入微信JS-SDK --> <script src="https://res.wx.qq.com/open/

By Ne0inhk