查找数组中的所有可能对

时间:2010-03-06 13:52:38

标签: java recursion

当我尝试做这样的事情时,我意识到我真的需要去上大学!

无论如何我有一个字符串数组(275)我需要循环遍历它们并用Java创建所有可能对的字符串。

我一直在学习递归,但我找不到答案。

3 个答案:

答案 0 :(得分:9)

如果对abba不同,请执行:

for i=0 to array.length
  for j=0 to array.length
    if i == j skip
    else construct pair array[i], array[j] 

如果没有,请执行以下操作:

for i=0 to array.length-1
  for j=i+1 to array.length
    construct pair array[i], array[j] 

请注意,我假设数组包含唯一的字符串!

答案 1 :(得分:2)

我提供了一个打印所有可能的n元组字符串的示例,只需将属性reqLen设置为2并打印所有可能的对。

public class MyString {

String[] chars = {"a", "b", "c"};
int reqLen = 2;

private void formStrings(String crtStr){

    if (crtStr.length() == reqLen){

        System.out.println(crtStr);
        return;
    }
    else
        for (int i = 0; i < chars.length; i++) 
            formStrings(crtStr + chars[i]);

}

public static void main(String[] args) {

    new MyString().formStrings("");
}}

答案 2 :(得分:1)

这是一个简单的双循环:

for(int x = 0; x < 275; x++) {
    final String first = arrayOfStrings[x];
    for(int y = 0; y < 275; y++) {
        if(y == x) continue; // will properly increase y
        final String second = arrayOfStrings[y];
        // TODO: do stuff with first and second.
    }
}

修改:正如评论所指出的,如果元素[a, b, c]只有一个ab而不是ba(称为组合),那么以下代码将起作用:

final ArrayList<String> collected = new ArrayList<String>();
for(int x = 0; x < 275; x++) {
    for(int y = 0; y < 275; y++) {
        if(y == x) continue; // will properly increase y
        final String p1 = arrayOfStrings[x] + arrayOfStrings[y];
        final String p2 = arrayOfStrings[y] + arrayOfStrings[x];
        if(!collected.contains(p1) && !collected.contains(p2)) {
            collected.add(p1);
        }
    }
}
// TODO: do stuff with collected