leetcode-753: 破解保险箱
leetcode-753: 破解保险箱
- 题目
- 解题
- 方法一:Hierholzer 算法
题目
题目链接
有一个需要密码才能打开的保险箱。密码是 n 位数, 密码的每一位是 k 位序列 0, 1, …, k-1 中的一个 。
你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果匹配,则能够打开保险箱。
举个例子,假设密码是 “345”,你可以输入 “012345” 来打开它,只是你输入了 6 个字符.
请返回一个能打开保险箱的最短字符串。
示例1:
输入: n = 1, k = 2
输出: "01"
说明: "10"也可以打开保险箱。
示例2:
输入: n = 2, k = 2
输出: "00110"
说明: "01100", "10011", "11001" 也能打开保险箱。
解题
方法一:Hierholzer 算法
参考链接
节点上存放n-1位数,路径上1位,然后可以变成n位tmp=currNode*k+j
,到另一个节点后,再转化为后n-1位
int currNode=i%node;
0~k-1
就是到该节点后,可以选择的路径,通过side
数组来记录删除的边。
由于记录路径,而不是节点,因此要在循环内, res+=j+'0';
将路径加入到结果中去
class Solution {public:int node;string res;void dfs(vector<int>& side,int n,int k,int i){int currNode=i%node;//节点的值(n-1位)for(int j=0;j<k;j++){int tmp=currNode*k+j; //节点+边(1位) (共n位)if(!side[tmp]++){ /* 仅遍历没有走过的边 */dfs(side,n,k,tmp);res+=j+'0';//j+'0'代表一个字符('0'~'9')}}}string crackSafe(int n, int k) {node=pow(k,n-1);/* 节点个数 */vector<int> side(node*k,0);/* 边数标志,用来指示每条边是否遍历过 */dfs(side,n,k,0);/* 从 n -1 个 0 的节点开始寻找 */res.append(n-1,'0');/* 补充起始节点字符串 */return res;/* 无需 reverse,翻转前后均为正确答案 */}
};
leetcode-753: 破解保险箱相关推荐
- Leetcode 753. 破解保险箱 C++
Leetcode 753. 破解保险箱 题目 有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, -, k-1 中的一个 . 你可以随意输入密码,保险箱会自动记 ...
- Java实现 LeetCode 753 破解保险箱(递归)
753. 破解保险箱 有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, -, k-1 中的一个 . 你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果 ...
- LeetCode 753. 破解保险箱(有向欧拉图,计算机译码)
有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, -, k-1 中的一个 . 你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果匹配,则能够打开保险箱 ...
- 【753. 破解保险箱】
来源:力扣(LeetCode) 描述: 有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, ..., k-1 中的一个 . 你可以随意输入密码,保险箱会自动记住 ...
- 753. 破解保险箱
有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, ..., k-1 中的一个 . 你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果匹配,则能够打开保 ...
- LeetCode-753. 破解保险箱
题目链接:753. 破解保险箱 很日常,没看题解之前依然没有发现这是道图论的题目(每日一题从官方题解开始=.=).第一次在OJ练习上做到图论的题,之前做图论的题都是辛辛苦苦写了好多结构体然后按点按边做 ...
- 自制机器人15分钟破解保险箱密码
去年圣诞节,内森·赛德的妻子给了他一个从Graigslist上淘来的二手保险箱.乍一看,好像是个奇怪的礼物.这对夫妻已经有了同型号的SentrySafe防火保险箱,从家得宝花120美元买的.但这个,有 ...
- 我是如何使用自制机器人在15分钟内破解保险箱密码的?
本文讲的是 我是如何使用自制机器人在15分钟内破解保险箱密码的?, 亮相Def Con大会 热辣的7月,安全圈有两场最为火爆的顶级信息会议在美国拉斯维加斯拉开帷幕,它们分别是美国黑帽大会BlackHa ...
- JAVA程序设计:破解保险箱(LeetCode:753)
有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, ..., k-1 中的一个 . 你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果匹配,则能够打开保 ...
最新文章
- linux on win原理,linux on win10 上手体验
- jmu-Java-02基本语法-06-枚举 (3分)
- Visual C++ 2008入门经典 第九章类的继承和虚函数(二)
- python写入文件不覆盖_Python第7课:不一样的新建文件
- 彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
- MongoDB:Map-Reduce
- [2018.07.24 T1] 真板题
- Ubuntu下LimeSDR-USB或LimeSDR Mini使用说明
- hⅰgh怎么读音发音英语_英语发音规则---gh
- u一点·料:阿里巴巴1688ued体验设计践行之路
- 为什么变量命名不建议用汉语拼音
- CJOJ 1308 【HNOI 2002 】营业额统计 / CodeVS 1296 营业额统计
- 苹果元数据被拒回复邮件多久_聊聊苹果账号被调查这事
- 交换机crc错误是什么意思_OSN1800设备LDX对接S9706交换机,交换机持续有CRC错误告警...
- 2014 【第五届蓝桥杯校内选拔赛】 C/C++ B组
- Antigen Detector(新冠试剂盒检测)
- 文件系统FATFS的移植教程
- 三星手机 qq上通过我的设备我的android上传到手机的东西,两个手机怎么互传文件?...
- java发送带图片的邮件代码
- 安装mysql5.7防火墙关了为什么远程登录不了呢?