我这几天一直在努力,我似乎无法做到 完成它。问题如下:
编写一个名为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
答案 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