我偶然发现了一个涵盖Big O的免费CodeAcademy课程,并且在我遇到一个特定问题之前就已经过去了。这看起来很简单,但我不知道为什么我这么艰难。
var people = ["Alice", "Bob", "Carol", "Dave", "Ed", "Mark", "Tom", "Lisa", "Sarah"];
任何人都可以提供一些见解,我将如何打印出这个数组中所有可能的对组合?例如,它应该打印出像
Alice, Bob
Dave, Mark
Ed, Lisa
此外,它说没有一对应该与自己配对,或重复已经存在的配对。例如,如果我们已经拥有了#Ed; Lisa",那就永远不应该打印出#34; Lisa,Ed"。
我开始了两个for循环,然后合法的只是不知道从哪里去沮丧!
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
}
}
解决方案确实不需要使用Javascript(但会很好),也许PHP或Java也可以使用。
答案 0 :(得分: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>");
}
}