输出给定序列按字典序的 r 组合,按照所有 n 个元素出现与否的 01 标记串 xnxn − 1, ..., x1 的字典序输出
时间: 2024-02-22 18:58:07 浏览: 166
字典序法输出排序
给定序列按字典序的 r 组合,可以通过生成所有长度为 r 的组合,再按字典序排序得到。具体做法可以使用递归实现,每次选择一个元素,然后在剩余元素中选择 r-1 个元素,直到选择完 r 个元素。代码实现如下:
```python
def combinations(arr, r):
if r == 0:
yield []
elif len(arr) == r:
yield arr
else:
for i in range(len(arr)):
for c in combinations(arr[i+1:], r-1):
yield [arr[i]] + c
```
对于所有 n 个元素出现与否的 01 标记串 xnxn − 1, ..., x1 的字典序输出,可以直接遍历 0 到 2^n-1,将每个数转化为二进制后补齐到 n 位,然后按照字典序输出即可。代码实现如下:
```python
def binary_combinations(n):
for i in range(2**n):
bin_str = bin(i)[2:].rjust(n, '0')
yield [int(x) for x in bin_str]
```
将两个函数结合起来,就可以实现按字典序输出给定序列按字典序的 r 组合了。
阅读全文