描述:

有一个需要密码才能打开的保险箱。密码是 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" 也能打开保险箱。

提示:

n 的范围是 [1, 4]。
k 的范围是 [1, 10]。
k^n 最大可能为 4096。

思 路 分 析 : \color{blue}{思路分析:} 思路分析:这道题的意思是我们将n位长的全排列密码进行“合并”,达到密码的长度最短。比如n == 2,k == 2时,密码只有“00”,“01”,“10”,“11”,我们将“00”与“10”合并可得“100”,再与“01”合并得“10001”,最后与“11”合并得“100011”。不难发现n位长的两个密码最多只能重叠n - 1位,通过n - 1次合并累计,这样得出的密码串肯定是最短的。

class Solution {public:string crackSafe(int n, int k) {const int total = pow(k, n);//全排列总共有k的n次方个string res = string(n, '0');//初始化unordered_set<string> visited;//用于记录res中已经构造过了的visited.insert(res); //由初始化一直进行构造,直到res包含全排列中所有的元素for (int i = 1; i < total; ++i) {//获取res当前最后n - 1个字符用于重复利用,构造下一个还没有构造过的排列string tempRes = res.substr(res.length() - n + 1, n - 1);//穷举添加的最后元素for (int j = k -1; j >= 0; --j) { string key = tempRes + to_string(j); if (visited.find(key) == visited.end()) {//如果这个元素没有构造过res += to_string(j);visited.insert(key);//标记构造break; } } } return res; }
};

LeetCode 破解保险箱(全排列)相关推荐

  1. LeetCode 破解保险箱 全排列【1】

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

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

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

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

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

  4. leetcode-753: 破解保险箱

    leetcode-753: 破解保险箱 题目 解题 方法一:Hierholzer 算法 题目 题目链接 有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, -, ...

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

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

  6. LeetCode-753. 破解保险箱

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

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

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

  8. leetcode题:全排列-数组

    leetcode题:全排列 给定一个 没有重复 数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1 ...

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

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

最新文章

  1. Blender 3.0机器人硬面建模材质渲染全流程学习课程
  2. solr mysql 导入命令_(solr系列:四)将mysql数据库中的数据导入到solr中及删除solr中导入的数据...
  3. 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】PowerPC + Linux2.6.25平台下的SPI驱动架构分析
  4. 手机屏幕坏了如何把手机里面的资料取出来_手机碎屏原来也有这么多讲究,早了解这几个方法就不会被坑了...
  5. 如何将两个php超链接,php超链接跳转
  6. 没有php5.sowenjian_(转)LINUX下PHP编译添加相应的动态扩展模块so(不需要重新编译PHP,以openssl.so为例...
  7. 剑指offer——数组中重复的数字
  8. vue 点击div 获取位置_Vue中div contenteditable 的光标定位方法
  9. Qcom WAPI方案
  10. 音视频学习(五)——H.264视频码流
  11. Java性能优化(详解)
  12. 关于苹果ID用哪些邮箱注册比较好安全?
  13. HTML5期末大作业:动漫电网站设计——动漫电影《你的名字》(7页) HTML+CSS大作业: 动漫电网页制作作业_动漫电网页设计...
  14. 苹果内购那些事儿(二)
  15. java 集合之Interface Map<K,V> HashMap实现类
  16. 2019/9/6工学结合周记
  17. xtrabackup全量、增量备份恢复mysql数据库
  18. [求助]hyperledger fabric在创建peer通道时出现this policy requires 1 of the 'Writers' sub-policies to be……
  19. Hive报错FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask
  20. 手机电脑如何使用OTG连接U盘教程及OTG功能常见问题解答

热门文章

  1. 十安知识网:如何做水煮螃蟹
  2. pygame实现飞机大战游戏
  3. 数据库-SQL语句练手
  4. 员工差旅费申请、报销还在手动操作?这5步助你管理效率提升90%
  5. 华为鸿蒙上手,原生鸿蒙系统,华为WATCH 3真机上手视频曝光
  6. IT界的笑话(更新版)
  7. vue--spa项目开发之登录注册
  8. 不可能打败-www.saierhaowaigua.net
  9. Adobe Acrobat 导出注释遇到的问题
  10. 得市场者得天下 2013款长城哈弗H5