注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
求问这道题的算法,看不懂代码,求大神解释一下~
一堆密码箱,每个密码都是四位0-9之间,算一个暴力破解序列,包含所有可能的四位序列,让这个序列尽量短
用的是DeBruijn,代码如下
- public class DeBruijn {
- public static String generateDeBruijnSequence(int k, int n) {
- StringBuilder sequence = new StringBuilder();
- generateLyndonWords(1, 1, k, new int[n+1], sequence);
- return sequence.toString();
- }
- private static void generateLyndonWords(int t, int p, int k, int[] a, StringBuilder sequence) {
- if (t > a.length-1) {
- if((a.length-1)%p==0) {
- for(int i = 1; i < p+1;i++) {
- sequence.append(a[i]);
- }
- }
- } else {
- a[t] = a[t-p];
- generateLyndonWords(t+1,p, k, a, sequence);
- for(int j=a[t-p]+1; j<=k-1; j++) {
- a[t] = j;
- generateLyndonWords(t+1,t, k, a, sequence);
- }
- }
- }
- public static void main(String[] args){
- System.out.println(generateDeBruijnSequence(10, 4).length());
- }
- }
复制代码 |