Cracking the Safe

news2024/9/21 22:08:32

在这里插入图片描述
原题链接:https://leetcode.cn/problems/cracking-the-safe/description/

题目要求的是,某个时刻能够打开保险箱的任一最短密码序列,需要包含所有密码子串。
答案应当是一个字符串,任意长度为n的子串的都是一种密码方案。
对于有n位,每位k种方案的密码串,共有k^n个。
题目要求最短,那么任意位置选出的子串应当是不重复的。
也就是说,一个长度为n的滑动窗口,在移动k^n次后,应得到k^n个不同的密码串。
一次滑动得到的两个不同密码串,前者的n-1位后缀是后者的n-1位前缀。
题目要求长度为n,将长度为n-1k^(n-1)个串作为图的节点。
通过追加[0,k),可以得到k^n个密码串,每个串的后n-1位子串一定等于图中的某个节点。在追加字符前前的子串,和,追加字符后的子串的后n-1位子串,之间,建立一条有向边。

  • 那么图中的每个节点都有k条出边,指向k个不同的图中节点。
  • k个图中节点一定是不同的,因为最后一个字符,也就是新追加的字符,是不相等的。

对于任意节点a1a2...aiaj,通过在xa1a2...ai末尾追加最后一个字符aj取后缀后得到,首位被舍弃。
首位有[0,k)k种情况,任意节点都有k的可选的状态来源:

  • 那么图中的每个节点都有k条入边,来自k个不同的图中节点。

那么图中的每个点,都有k条出边和入边。
那么任意节点出发,都有一条欧拉回路。
最暴力的写法是,枚举每一位所有可能的情况,将k^n个密码串拼接。但必然不是最短方案。
因为一定有密码串满足一者的后缀等于另一者的前缀,可以借此压缩密码串长度。

dfs过程分析

状态表示node

  • 集合:已经生成的串,的末尾n-1个字符的状态压缩表示为node
  • 属性:从node出发的最短序列

状态转移:

  • 当前状态表示为node,是一个长度为n-1的数字,表示最后n-1位数字。
  • 在状态的末尾添加一个k进制数字x,形成一个新的n位序列。

去重和记忆化:

  • 通过set<int> seen,记录所有已经访问过的状态,确保每个状态只被访问一次。
  • 通过nei % highset,取出新状态的高n-1位部分,如此递归,直到所有状态都被遍历。

字符串拼接:

  • 在递归过程中,每当成功生成了一个新的状态,就将对应的x,即当前状态后添加的数字,转化为字符,并将其添加到最终答案字符串中。
  • 最后追加n-1'0',表示起点,因为Hierholzer算法求的路径是逆序的。
class Solution {
public:
    string crackSafe(int n, int k) {
        int highset = pow(10, n - 1);
        set<int> seen;
        string ans;
        auto dfs = [&](auto dfs, int node) -> void {
            for (int x = 0; x < k; x++) {
                int nei = node * 10 + x;
                if (!seen.count(nei)) {
                    seen.insert(nei);
                    dfs(dfs, nei % highset);
                    ans += x + '0';
                }
            }
        };
        dfs(dfs, 0);
        ans += string(n - 1, '0');
        return ans;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2090887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索前沿科技:在本地系统上安装和使用Style TTS2进行高质量语音合成

我们正处于一个令人激动的时代&#xff0c;有如此多的选择&#xff0c;不仅在大型语言模型方面&#xff0c;还有现在的文本到语音&#xff08;TTS&#xff09;模型。在这篇文章中&#xff0c;我将向您展示如何在本地系统上轻松安装这个非常出色的模型——Style TTS2&#xff0c…

联蔚盘云亮相CDIE消费品行业峰会

8月28日&#xff0c;由华昂集团主办&#xff0c;专注于消费品行业的2024CDIE行业峰会在广州盛大开幕。联蔚数科携子品牌联蔚盘云亮相本次大会。本次峰会汇聚了众多企业高管&#xff0c;行业领域专家&#xff0c;围绕AI技术前沿、数智营销新策略、会员运营以及品牌增量路径等话题…

2024如何开始进入美业?美业创业步骤分享|博弈美业系统管理系统源码

进入美业可以是一个令人兴奋且具有挑战性的决定。以下是一些步骤&#xff0c;希望可以帮助你在美业建立自己的职业生涯&#xff1a; 1.确定你的兴趣和专长&#xff1a; 首先要考虑你对美业的兴趣和擅长的领域&#xff0c;比如化妆、美发、美甲、美容护理等。确定自己的兴趣和优…

随笔八、LED-RGB灯程控测试

目录 1. 泰山派环境 2. 编程控制 1. 泰山派环境 泰山派开发板上有一颗RGB三色LED灯&#xff0c;烧写官方镜像上电后开始闪烁&#xff0c;表示系统已经正常运行。可以在设备树里修改初始状态。 查看电路图知道&#xff0c;RGB是通过GPIO1的B0~B2引脚控制的&#xff0c;低电平…

【吊打面试官系列-Redis面试题】Memcache 与 Redis 的区别都有哪些?

大家好&#xff0c;我是锋哥。今天分享关于 【Memcache 与 Redis 的区别都有哪些&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; Memcache 与 Redis 的区别都有哪些&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 1、存储方式 Memecach…

Java笔试面试题AI答之面向对象(9)

文章目录 49. 简述Java继承时&#xff0c;类的执行顺序是什么&#xff1f;一、类的静态成员初始化顺序二、对象的初始化顺序三、总结 50. 举例说明什么情况下会更倾向于使用抽象类而不是接口&#xff1f;1. 当需要定义和实现部分通用行为时2. 当需要访问修饰符或方法修饰符时3.…

07.整合Pinia

1. 前言 Pinia 是 Vue 的专属状态管理库&#xff0c;它允许你跨组件或页面共享状态。更加契合 VUE3 组合式 API 和 TS 类型支持。想进一步了解&#xff0c;参考官网&#xff1a;https://pinia.vuejs.org/ 如果是使用官方脚手架搭建的工程&#xff0c;选择了 pinia 将会自动帮我…

Git之2.5版本重要特性及用法实例(五十七)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者. 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列…

Qt应用的高分辨率适配

背景 工作中需要面对触控大屏的4K分辨率场景&#xff0c;同时也有越来越多人开始使用高分屏&#xff0c;原来多基于1080p分辨率开发的Qt程序无法很好适配更高的分辨率。 没有特意针对高分辨率场景做适配时&#xff0c;Qt应用的表现通常有两种情况&#xff1a; 分辨率高的情况…

六西格玛管理培训公司 谈 故障树分析(Fault Tree Analysis)

故障树分析&#xff08;Fault Tree Analysis, FTA&#xff09;&#xff1a;一种自顶向下的演绎故障分析工具&#xff0c;其中使用布尔逻辑将一系列较低级别的事件组合起来&#xff0c;用以分析系统的非期望状态。那么&#xff0c;如何使用故障树分析&#xff08;FTA&#xff09…

集成电路学习:什么是CRC循环冗余校验

一、CRC&#xff1a;循环冗余校验 CRC&#xff08;Cyclic Redundancy Check&#xff09;&#xff0c;即循环冗余校验&#xff0c;是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的快速算法。它主要用于检测或校验数据传输或保存后可能出现的错误。CRC利用除法及…

[Labview] 表格改值后单元格编辑功能,更改颜色、字体、颜色等

效果如下所示&#xff1a; 例子中演示了单元格变色&#xff0c;具体需要什么修改&#xff0c;在相同的位置进行操作即可。 检测到[鼠标释放]事件&#xff0c;则记录被选中的单元格。 使用[鼠标按下]事件也可以&#xff0c;不过我个人测试下来&#xff0c;[按下]的判断精准度不…

智能候诊系统 项目源码25287

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

万亿低空经济:无人机飞手考证正当时

随着低空经济的不断发展和国家政策的持续推动&#xff0c;无人机行业正迎来前所未有的发展机遇。低空经济作为一种新兴的综合性经济形态&#xff0c;依托低空空域&#xff0c;通过各类有人驾驶和无人驾驶航空器的低空飞行活动&#xff0c;辐射带动相关领域融合发展。这一领域涉…

视频结构化从入门到精通——GPU主要硬件平台介绍

视频结构化主要硬件平台 1. 深度学习中“硬”和“软”的概念 在深度学习中&#xff0c;“硬”和“软”通常用于描述不同的处理方法或策略&#xff0c;尤其是在解码、编码、推理等任务中。它们反映了算法在处理信息时的确定性和灵活性。 软&#xff08;Soft&#xff09; 处理…

电子检测报告如何盖骑缝章?

电子检测报告如何盖骑缝章&#xff1f;使用e章宝&#xff08;易友EU3000智能盖章软件&#xff09;给电子检测报告盖骑缝章&#xff0c;可以遵循以下步骤进行&#xff1a; 一、准备工作 确保e章宝软件已安装&#xff1a; 在计算机上安装e章宝&#xff08;易友EU3000智能盖章软件…

小程序页面跳转传url参数被截取问题

跳转时处理 const params {url:hhtp://www.baidu.com?a1}const queryString Object.keys(params).map(key > ${encodeURIComponent(key)}${encodeURIComponent(params[key])}).join(&);wx.navigateTo({url: ../../toPageView/toPageView?${queryString},})webview页…

推荐Windows11中帮助提高远程工作效率的6个最佳工具

序言 由于我们中的许多人都在远程工作,Windows 11附带了一些内置的焦点工具来帮助我们完成工作也就不足为奇了。但是,Windows 11究竟为我们这些想要确保我们真正完成工作的专业人士提供了什么?让我们来看看。 专注期和生产力 Windows 11取消了任务栏上的焦点模式,代之以…

李林880重点题推荐

考研倒计时113天&#xff0c;九月份即将来临&#xff0c;目前大家都处在强化阶段的学习中。虽然每个人的复习进度有所不同&#xff0c;但无论进展如何&#xff0c;我们都要保持良好的心态。进度快的同学要继续稳扎稳打&#xff0c;而进度稍慢的同学也不要焦虑&#xff0c;保持专…

部署 Web 项目到 Linux,可以使他人也访问项目的方法

目录 一、环境配置 二、建构项目并打包 三、上传Jar包到服务器, 并运行 3.1 上传Jar包 3.2 运行 jar 包 3.3 开放端口号 四、其他问题 4.1 运行异常问题 4.2 杀掉进程 五、总结 一、环境配置 如果本地项目是SpringBoot项目&#xff0c;使用的数据库是MySQL&#xff…