递归地得到单词的组合

时间:2014-09-15 18:01:00

标签: java recursion permutation

我这几天一直在努力,我似乎​​无法做到 完成它。问题如下:

编写一个名为String [] perm(int n)的递归方法,该方法接受 一个参数:整数n。该方法返回所有单词的数组 正好是n个音节。可供使用的词语是:“Foo” 和“酒吧”

我有以下代码而没有递归:

static String[] words = {"Foo","Bar"};
static int      n     = 2; 
static int      count = 0;

public static String[] perm(int n) {
    String[] wordsArray = new String[4];

    for(int i = 0; i < words.length; i++) {
        for(int j = 0; j < words.length; j++) {
            wordsArray[count] = words[i] + words[j];
            count++;
        }
    }

    return wordsArray;
}

我似乎无法通过使用递归得到以下结果 并沿途返回一个字符串数组。所以我是 想知道你是否可以帮助我。

以下应该是2个音节的结果:

FooFoo
FooBar
BarFoo
BarBar

2 个答案:

答案 0 :(得分:2)

这是一个初步的方法,请根据您的需要进行修改......

public static void permutationForAString(String str) {
    permutation("", str);
}

private static void permutation(String prefix, String str) {
    int n = str.length();
    if (n == 0) System.out.println(prefix);
    else {
        for (int i = 0; i < n; i++)
            permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n));
    }
}

请注意,这并不考虑重复...

permutationForAString("ABC");

将输出

ABC
ACB
BAC
BCA
CAB
CBA

答案 1 :(得分:1)

以下是您需要的工作。

 public List<String> permute(String[] stringInput, int curr)
  {
    List<String> permutations = new ArrayList<String>();
    if (curr >= stringInput.length-1)
    {
      return Arrays.asList(stringInput);
    }
    else
    {
      for (int i = 0; i < stringInput.length; i++)
      {
        String currentCharacter = stringInput[i];
        List<String> permutationsOutput = permute(stringInput,curr+1);
        for (String singlePermutation : permutationsOutput)
        {
          String currentPermutations = currentCharacter + singlePermutation;
          permutations.add(currentPermutations);
        }
      }
      return permutations;
    }
  }

像这样称呼

permute(arr, 0);

其中0是开始置换的起始索引,它也可以作为递归情况下的限制条件。

输出:

FooFoo
FooBar
BarFoo
BarBar