import java.util.HashSet;
import java.util.Set;
// 0753. Cracking the Safe
class Solution {
public String crackSafe(int n, int k) {
if (n == 1 && k == 1) {
return "0";
}
StringBuilder ans = new StringBuilder();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n - 1; ++i) {
sb.append("0");
}
String start = sb.toString();
Set<String> visited = new HashSet<>();
dfs(start, k, visited, ans);
ans.append(start);
return ans.toString();
}
public void dfs(String start, int k, Set<String> visited, StringBuilder ans) {
for (int i = 0; i < k; ++i) {
String nbr = start + i;
if (!visited.contains(nbr)) {
visited.add(nbr);
dfs(nbr.substring(1), k, visited, ans);
ans.append(i);
}
}
}
}
学习笔记:
这又是一道超级困难题,普通深搜似乎是难以通过的,得剪枝。
这其实是求一个de Bruijn序列,和汉密尔顿圈、欧拉回路都有关系。
这个需要等以后有空了才能去研究了。