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: 破解保险箱相关推荐

  1. Leetcode 753. 破解保险箱 C++

    Leetcode 753. 破解保险箱 题目 有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, -, k-1 中的一个 . 你可以随意输入密码,保险箱会自动记 ...

  2. Java实现 LeetCode 753 破解保险箱(递归)

    753. 破解保险箱 有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, -, k-1 中的一个 . 你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果 ...

  3. LeetCode 753. 破解保险箱(有向欧拉图,计算机译码)

    有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, -, k-1 中的一个 . 你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果匹配,则能够打开保险箱 ...

  4. 【753. 破解保险箱】

    来源:力扣(LeetCode) 描述: 有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, ..., k-1 中的一个 . 你可以随意输入密码,保险箱会自动记住 ...

  5. 753. 破解保险箱

    有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, ..., k-1 中的一个 . 你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果匹配,则能够打开保 ...

  6. LeetCode-753. 破解保险箱

    题目链接:753. 破解保险箱 很日常,没看题解之前依然没有发现这是道图论的题目(每日一题从官方题解开始=.=).第一次在OJ练习上做到图论的题,之前做图论的题都是辛辛苦苦写了好多结构体然后按点按边做 ...

  7. 自制机器人15分钟破解保险箱密码

    去年圣诞节,内森·赛德的妻子给了他一个从Graigslist上淘来的二手保险箱.乍一看,好像是个奇怪的礼物.这对夫妻已经有了同型号的SentrySafe防火保险箱,从家得宝花120美元买的.但这个,有 ...

  8. 我是如何使用自制机器人在15分钟内破解保险箱密码的?

    本文讲的是 我是如何使用自制机器人在15分钟内破解保险箱密码的?, 亮相Def Con大会 热辣的7月,安全圈有两场最为火爆的顶级信息会议在美国拉斯维加斯拉开帷幕,它们分别是美国黑帽大会BlackHa ...

  9. JAVA程序设计:破解保险箱(LeetCode:753)

    有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, ..., k-1 中的一个 . 你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果匹配,则能够打开保 ...

最新文章

  1. linux on win原理,linux on win10 上手体验
  2. jmu-Java-02基本语法-06-枚举 (3分)
  3. Visual C++ 2008入门经典 第九章类的继承和虚函数(二)
  4. python写入文件不覆盖_Python第7课:不一样的新建文件
  5. 彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
  6. MongoDB:Map-Reduce
  7. [2018.07.24 T1] 真板题
  8. Ubuntu下LimeSDR-USB或LimeSDR Mini使用说明
  9. hⅰgh怎么读音发音英语_英语发音规则---gh
  10. u一点·料:阿里巴巴1688ued体验设计践行之路
  11. 为什么变量命名不建议用汉语拼音
  12. CJOJ 1308 【HNOI 2002 】营业额统计 / CodeVS 1296 营业额统计
  13. 苹果元数据被拒回复邮件多久_聊聊苹果账号被调查这事
  14. 交换机crc错误是什么意思_OSN1800设备LDX对接S9706交换机,交换机持续有CRC错误告警...
  15. 2014 【第五届蓝桥杯校内选拔赛】 C/C++ B组
  16. Antigen Detector(新冠试剂盒检测)
  17. 文件系统FATFS的移植教程
  18. 三星手机 qq上通过我的设备我的android上传到手机的东西,两个手机怎么互传文件?...
  19. java发送带图片的邮件代码
  20. 安装mysql5.7防火墙关了为什么远程登录不了呢?

热门文章

  1. 什么是“UD”什么是fbinst启动盘制作?
  2. T/T + FOB履约流程
  3. 中华民族传统文化精髓___二十四孝
  4. 八大排序算法总结——Java篇
  5. 基于Java的聊天系统设计
  6. IP地址、子网掩码详解
  7. android提高应用声音,Sleepo - 提升睡眠质量的声音应用 - Android 应用 - 【最美应用】...
  8. nodejs代码自动提示概述
  9. 新数据显示社交媒体影响力和参与度对流媒体增长至关重要
  10. Redboot安装历程