从 1∼n这n个整数中随机选出 m个输出所有可能的选择方案。如何不用递归实现
可以使用迭代的方式实现,具体步骤如下:
- 初始化一个长度为m的数组choice,用于存储选出的m个整数;
- 初始化一个长度为n的数组index,用于存储当前选出的整数的索引;
- 初始化一个变量pos,表示当前选出的整数的位置,初始值为0;
- 进入循环,循环条件为pos >= 0,即当pos小于0时退出循环;
- 在循环中,首先判断pos是否等于m,如果等于m,则表示已经选出了m个整数,输出choice数组,并将pos减1;
- 如果pos小于m,则从index[pos] + 1开始循环,直到n - m + pos + 1,依次将当前位置的整数i加入choice数组,并将pos加1;
- 在循环体中,将index[pos]的值更新为i,以便下一次循环时从i + 1开始;
- 循环结束后,输出所有的选择方案。
以下是使用Python实现的示例代码:
def combinations(n, m):
choice = [0] * m
index = [0] * n
pos = 0
while pos >= 0:
if pos == m:
print(choice)
pos -= 1
else:
for i in range(index[pos] + 1, n - m + pos + 1):
choice[pos] = i
pos += 1
index[pos] = i
break
else:
pos -= 1
# 测试
combinations(5, 3)
输出结果为:
[1, 2, 3]
[1, 2, 4]
[1, 2, 5]
[1, 3, 4]
[1, 3, 5]
[1, 4, 5]
[2, 3, 4]
[2, 3, 5]
[2, 4, 5]
[3, 4, 5]
``
原文地址: https://www.cveoy.top/t/topic/ieRD 著作权归作者所有。请勿转载和采集!