Java 查找数组中所有可能的对

Java 查找数组中所有可能的对,java,recursion,Java,Recursion,当我尝试做这样的事情时,我意识到我真的需要上大学 无论如何,我有一个字符串数组(275),我需要在它们之间循环,并用Java创建所有可能对的字符串 我一直在学习递归,但我找不到答案。这是一个简单的双循环: for(int x = 0; x < 275; x++) { final String first = arrayOfStrings[x]; for(int y = 0; y < 275; y++) { if(y == x) continue; //

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

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


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

这是一个简单的双循环:

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.
    }
}

如果配对
ab
ba
不同,请执行以下操作:

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] 

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

我提供了一个打印所有可能的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("");
}}
公共类MyString{
字符串[]字符={“a”、“b”、“c”};
内部需求=2;
私有void formStrings(字符串crtStr){
if(crtStr.length()=请求){
系统输出打印LN(crtStr);
返回;
}
其他的
for(int i=0;i
为什么要递归?double for语句就可以了。给定一个数组
[A,b,c]
,是否要创建:
[ab,ac,ba,bc,ca,cb]
?或者
ab
ba
是一样的吗?我相信你在学习了冒泡排序之后会找到答案。为什么要提到冒泡排序?问题甚至不在于排序。另请参见Hi中的函数解决方案。。我需要完全一样的东西。。但是我有一个很大的数组(比如大小为10^9)。。答复需要很长时间。。有没有优化的方法?我在这里看到的唯一可能的优化(第一种情况)是删除if测试,在循环之后,删除n个额外的对象,其中
I==j
(如果可以使用所选的数据结构执行此操作)。这样,您就不必执行i==j检查的
n^2次。但是,也许JVM已经在以更好的方式对此进行优化。然后,如果你能负担得起一些多线程或云计算,你总是可以在几个线程/服务器之间分割循环
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("");
}}