我有一个整数的总分区,我只想要那些所有值都不相等的分区。例如,3 的分区是 {1,1,1,1}、{2,2}、{3,1}、{1,1,2} 和 {4}。因此,所需的不相等分区是 {3,1} 和 {4},因为它们不包含相等的元素。下面提供了我用于查找所有分区的代码。我可以过滤分区以获得所需的结果,但我想要一些有效的方法来查找所有分区,其中没有相等的项,而无需找到所有分区。我已经搜索了网络和 stackoverflow,但没有确切说明我面临的问题。每一个想法都值得赞赏。谢谢。
function total_partitions_of_a_number($n) {# base case of recursion: zero is the sum of the empty list
if(!$n) return array(array()); # return empty array
# modify partitions of n-1 to form partitions of n
foreach(total_partitions_of_a_number($n-1) as $p) { # recursive call
$a[] = array_merge(array(1), $p); # "yield" array [1, p...]
if($p && (count($p) < 2 || $p[1] > $p[0])) { # p not empty, and length < 2 or p[1] > p[0]
++$p[0]; # increment first item of p
$a[] = $p; # "yield" p
}
}
return $a; # return all "yielded" values at once
}