打印阵列中所有可能的字符串对组合

Dan*_*ich 0 javascript arrays

我偶然发现了一个涵盖Big O的免费CodeAcademy课程,并且在我遇到一个特定问题之前就已经过去了.这似乎很容易,但我不知道为什么我这么艰难.

var people = ["Alice", "Bob", "Carol", "Dave", "Ed", "Mark", "Tom", "Lisa", "Sarah"];
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供一些见解,我将如何打印出这个阵列中所有可能的对组合?例如,它应该打印出来

Alice, Bob
Dave, Mark
Ed, Lisa
Run Code Online (Sandbox Code Playgroud)

此外,它说没有一对应该与自己配对,或重复已经存在的配对.例如,如果我们已经有"Ed,Lisa",它就不应该打印"Lisa,Ed".

我开始两个循环,然后合法只是不知道从那里去哪里令人沮丧!

var people = ["Alice", "Bob", "Carol", "Dave", "Ed", "Mark", "Tom", "Lisa", "Sarah"];

for(var i = 0; i < people.length; i++){

   for(j = 0; j < people.length; j++) {
       // some fancy stuff here
    }
}
Run Code Online (Sandbox Code Playgroud)

解决方案实际上并不需要在Javascript中(但会很好),也许PHP或Java也可以工作.

San*_*ani 5

您可以使用2个for循环来获取所有组合.想法是修复第一个元素并通过迭代列表来更改每对中的第二个元素.现在的问题是第二个循环从哪里开始进行迭代?

我们不需要一对具有使这里相同的元素i can't be same as j (i!=j),我们不需要对(B,A)(A,B)已经在列表中.因此,开始对内部循环进行迭代,i+1从而确保(B,A)在已经打印的情况下不会打印(A,B).

var people = ["Alice", "Bob", "Carol", "Dave", "Ed", "Mark", "Tom", "Lisa", "Sarah"];

var total_people = people.length;
for(var i=0;i<total_people;i++)
{
    for(var j=i+1;j<total_people;j++)
    {
        document.write(people[i]+" , "+people[j]+"<br>");
    }
}
Run Code Online (Sandbox Code Playgroud)