- 有一个需要密码才能打开的保险箱。密码是 n 位数, 密码的每一位是 k 位序列 0, 1, ..., k-1 中的一个 。
你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果匹配,则能够打开保险箱。
举个例子,假设密码是 "345",你可以输入 "012345" 来打开它,只是你输入了 6 个字符.
请返回一个能打开保险箱的最短字符串。
来源:力扣(LeetCode) 链接:leetcode.cn/problems/cr… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路 起始 (n - 1) 个00 最后走回原点,形成一个环,
/**
* @param {number} n
* @param {number} k
* @return {string}
*/
var crackSafe = function(n, k) {
let highest = Math.pow(10, n - 1)
let ans = ''
const seen = new Set()
const dfs = (node) => {
for(let i = 0; i < k; i++) {
let nei = node * 10 + i
if(!seen.has(nei)) {
seen.add(nei)
dfs(nei % highest)
ans += i
}
}
}
dfs(0)
for(let i = 1; i < n; i++) [
ans += '0'
]
return ans
};