JAVA用于创建所有可能的单词组合 [英] JAVA for creating all possible combination of words

查看:135
本文介绍了JAVA用于创建所有可能的单词组合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试获取用户输入的所有可能的单词组合。如 aa,bb,cc 之类的单词输入应该给出

I am trying to get all the possible combinations of words input by user. Such as words input like aa, bb, cc should give

aa
bb
cc
aabb
aacc
bbaa
bbcc
ccaa
ccbb
aabbcc
aaccbb
bbaacc
bbccaa
ccbbaa
ccaabb

他们可以按任何顺序排列,但最好是按顺序排列。

They can in any order but preferably in sorted order.

过去一小时我一直在努力完成这项工作,我觉得我对一些我无法弄清楚的事感到困惑并继续在圈子里。有人可以指出我正确的方向。

I have been trying to accomplish this for past hour and I think I am confused about something that I can't figure out and keep going in circles. Can someone please point me in the right direction.

到目前为止的代码是

import java.util.Arrays;
import java.util.Scanner;

public class WordCombination {
private static String[] wordlist;
private static String[] wordcomb;

public static void main(String[] argv){
    Scanner a = new Scanner(System.in);

    System.out.print("Enter Words:");
    setWords(a.nextLine());

    creatCombinations();

}

private static void setWords(String words){
    System.out.println("Entered words: " + words);
    wordlist = words.split("\\s+");
    Arrays.sort(wordlist);
    System.out.println(Arrays.toString(wordlist));
}

private static void creatCombinations(){
    int size = wordlist.length;
    int perm = (int) Math.pow(size, size);
    int c = 1;

    wordcomb = new String[perm];

    String word = "";
    /*
    for(int i = 0; i < size; i++){
        word = wordlist[i];         
        for(int j = 0; j < size; j++){
            word += wordlist[j];            
            System.out.println(c + ": " + word + ".com");
            c++;
        }
        word = "";
    }*/
    int l = 0;
    for(int i = 0; i < size; i++){
        int permj = (i+1) * size;
        System.out.println("------------------> " + permj + " permutations for " + (i + 1) + " words combination");
        int iterations = permj * (i+1);
        System.out.println(" Iterations: " + iterations);
        word = wordlist[i];
        for(int j = 0; j < permj; j++){
            for(int k = 0; k < i+1; k++){
                int permi = i * size;
                int index = permi + (k%permj);
                wordcomb[c-1] += "" + wordlist[l%size];
                out(l%size + "");
                l++;
            }
            System.out.println(c + ": " + wordcomb[c-1]);
            c++;
        }
        word = "";
    }

}

private static void out(String s){
    System.out.println(s);
}

}

* 编辑:我得到的输出是*

    Enter Words:1 2 3
Entered words: 1 2 3
[1, 2, 3]
------------------> 3 permutations for 1 words combination
 Iterations: 3
0
1: 1
1
2: 2
2
3: 3
------------------> 6 permutations for 2 words combination
 Iterations: 12

Enter Words:aa bb cc
Entered words: aa bb cc
[aa, bb, cc]
------------------> 3 permutations for 1 words combination
 Iterations: 3
0
1: aa
1
2: bb
2
3: cc
------------------> 6 permutations for 2 words combination
 Iterations: 12
0
1
4: aabb
2
0
5: ccaa
1
2
6: bbcc
0
1
7: aabb
2
0
8: ccaa
1
2
9: bbcc
------------------> 9 permutations for 3 words combination
 Iterations: 27
0
1
2
10: aabbcc
0
1
2
11: aabbcc
0
1
2
12: aabbcc
0
1
2
13: aabbcc
0
1
2
14: aabbcc
0
1
2
15: aabbcc
0
1
2
16: aabbcc
0
1
2
17: aabbcc
0
1
2
18: aabbcc


推荐答案

我认为你的方法存在根本缺陷。在输出中,置换的第一个字符=前一个字符的最后一个字符+ 1,置换的每个字符=前一个字符+ 1,这不是置换的工作方式。所以我认为它不容易修复。

I think your approach is fundamentally flawed. In your output, the first character of a permutation = the last character of the previous one + 1, and each character of a permutation = the previous character + 1, which is not how permutation work. So I don't think it can easily be fixed.

下面是一种使用递归的方法。它只是尝试某个位置的每个角色,然后递归到下一个位置。

Below is a working way to do it, using recursion. It simply tries every character in a position, then recurses to the next position.

import java.util.Arrays;

public class NewMain
{
   public static void main(String[] args)
   {
      c = Arrays.asList("aa","bb","cc").toArray(new String[0]);
      permutation(0);
      System.out.println("Number of permutations = " + count);
   }

   static String[] c;
   static int count = 0;

   static void swap(int pos1, int pos2)
   {
      String temp = c[pos1];
      c[pos1] = c[pos2];
      c[pos2] = temp;
   }

   public static void permutation(int start)
   {
      if (start != 0)
      {
         for (int i = 0; i < start; i++)
            System.out.print(c[i]);
         System.out.println();
         count++;
      }

      for (int i = start; i < c.length; i++)
      {
         swap(start, i);
         permutation(start + 1);
         swap(start, i);
      }
   }
}

打印:

aa
aabb
aabbcc
aacc
aaccbb
bb
bbaa
bbaacc
bbcc
bbccaa
cc
ccbb
ccbbaa
ccaa
ccaabb
Number of permutations = 15

这篇关于JAVA用于创建所有可能的单词组合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆