每次使用相同的选项获得x个斑点的所有唯一组合

沙尔

我不确定使用的术语正确,但是我需要一个程序,该程序可以为固定数量的选项提供可变数量的所有唯一组合,例如:

options: "a", "b", "c"  
max spots: 3

output:
a 
a a 
a b
a c
a a a 
a a b
a b b 
a a c
a c c 
a b c
b
b b 
b c
b b b
b b c 
b c c 
c
c c 
c c c 

我目前有一些代码,但是我不知道如何使它可变地扩展以容纳更多地点。通常,它会将组合放入数组中,而不是将其打印出来,然后将该数组用于其他计算。

$options = array("a", "b", "c");

for ($x = 0; $x < 3; $x++) {
    print "$options[$x]\n";
    for ($y = $x; $y < 3; $y++) {
        print "$options[$x] $options[$y]\n";
        for ($z = $y; $z < 3; $z++) {
            print "$options[$x] $options[$y] $options[$z]\n";
        }
    }
}

我的另一项成功的尝试是将生成的组合放入一个数组中,对该数组进行排序,将该数组转换为字符串,并检查该字符串是否已经包含所有可接受的组合字符串。这似乎效率极低,我希望有更好的方法。我强烈不希望使用外部函数,因为我想在PHP和循环等方面变得更好。

马拉卡

您可以使用递归到达那里(假设您在选项数组中只有唯一的字符,如果没有,则必须先这样做):

function printCombinations(&$options, $max, $index = 0, $prefix = '') {
    if ($prefix)
        print "$prefix\n";
    if ($max <= 0)
        return;
    for ($i = $index; $i < count($options); $i++) {
        printCombinations($options, $max - 1, $i, $prefix . ' ' . $options[$i]);
    }
}

您可以这样称呼:printCombinations(['a', 'b', 'c'], 3);因为我们有点枚举组合,所以我们不会得到任何重复(除非$ options具有重复)。

这将为您提供,a b但不会给您b a,因此必须按顺序选择元素,这似乎是您的列表所指示的内容。上面的电话应该会给您确切的列表(顺序略有不同)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

递归函数来获得两个或多个的所有唯一组合

如何获得特定列的值的所有唯一组合

组合 3 个表以生成所有列的唯一组合

生成两个Excel列的所有可能的唯一组合

一组值的所有唯一组合

从列表列表中获取所有唯一组合,直到第 n 个组合

如何获得两列的唯一组合?

查找具有两列的唯一组合的所有行

从具有重复元素的向量生成所有唯一组合

查询表中具有一个值但没有另一个值的所有唯一组合

如何从SQL中的1列返回所有唯一组合?

从排列列表中获取所有唯一组合

生成项目的所有唯一组合

查找简单路径的所有唯一组合

如何找到多维数组中每个元素的所有唯一组合

删除除两列的最新唯一组合以外的所有内容

c#如何获取对象列表及其频率的所有唯一组合

找到 1 到 k 之间 n 个数字的所有唯一组合

Python-从长度不等的列表中获取替换的所有唯一组合

从数组获取给定数量的元素的所有唯一组合

JavaScript,从多个数组中获取所有唯一组合

生成数组的所有唯一组合的最佳方法?

查找固定大小的所有唯一组合以达到给定的平均范围

5 * 12网格中所有唯一组合的算法

如何创建包含 Y 个项目的 X 数组的每个唯一组合?

使用递归查找唯一组合

使用数据框r中的2个变量生成唯一组合矩阵

R在给定的类中创建ID的唯一组合(未创建所有组合)

如何创建所有唯一组合的列表,同时为每个组合保留总计列?