打印数组中字符串对的所有可能组合
问题描述:
我偶然发现了一个免费的CodeAcademy课程,该课程涵盖了大O,并且在我遇到特定问题之前就已经完成。这似乎很容易,但我不知道为什么我有这样艰难的时间。打印数组中字符串对的所有可能组合
var people = ["Alice", "Bob", "Carol", "Dave", "Ed", "Mark", "Tom", "Lisa", "Sarah"];
任何人都可以提供一些见解,我将如何去打印出此数组中的所有可能的组合对?例如,它应该打印出像
Alice, Bob
Dave, Mark
Ed, Lisa
而且,可以说,没有对应该永远配对本身,或者重复一个已经存在的对。例如,如果我们已经有“Ed,Lisa”,它绝不应该印出“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也可以。
答
您可以使用2 for
循环获取所有组合。想法是修复第一个元素,并通过迭代列表来更改每对中的第二个元素。现在的问题是,第二个循环从哪里开始进行迭代?
我们不需要一对具有相同的元素,所以在这里i can't be same as j (i!=j)
,我们不需要一对(B,A)
是(A,B)
已经在列表中。因此,从i+1
开始对内循环进行迭代,以确保它在打印(A,B)
时不会打印(B,A)
。
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>");
}
}
我认为这实际上有效。我在Java编辑器中测试过它,而且我没有得到你提到的“Bob,Alice”@Jonasw –
@Daniel Zuzevich是的,那是我的错误,已经编辑我的评论 –
没有问题。优胜者优胜者鸡晚餐!这是一个不错的和简单的解决方案,可以很容易地转移到JS。非常感谢。当Stack经过4分钟的等待时间后,我会将此标记为正确的? –