i*****e 发帖数: 218 | 1 求救, F家onsite算法题
到F家onsite, 被问了这个题, 我不会, 请大家帮忙吧。
这是一个组合问题的算法题。
给一个自然数集,比如:1, 2, 3, 4, ...., 100.
又任给一个自然数, n, (n是一个变量),举例来说, n = 3,
找出这个自然数集中选出n个数的全部组合, 把它们打印出来。
举例来说, n = 3, 打印出:
1, 2, 3
1, 2, 4,
1, 2, 5
2, 3, 4
2, 3, 5
97, 98, 99
98, 99, 100
我知道总的组合数是: 100!/n!
我不知道怎么把这些组合都打印出来。
(打印的顺序可以自己定, 关键是把这些所有的组合都打印出来.
他们的要求是针对任何一个n < 100, 比如 n = 49, 打印出所有的组合).
多谢大家。
(当时还问了一个问题是, 如果用python 或 javascript 怎么实现它)。 | n*****t 发帖数: 22014 | 2 递归吧,集合里循环,抽掉一个数把集合传下去,递归 n 次,到 0 了打印
【在 i*****e 的大作中提到】 : 求救, F家onsite算法题 : 到F家onsite, 被问了这个题, 我不会, 请大家帮忙吧。 : 这是一个组合问题的算法题。 : 给一个自然数集,比如:1, 2, 3, 4, ...., 100. : 又任给一个自然数, n, (n是一个变量),举例来说, n = 3, : 找出这个自然数集中选出n个数的全部组合, 把它们打印出来。 : 举例来说, n = 3, 打印出: : 1, 2, 3 : 1, 2, 4, : 1, 2, 5
| l******t 发帖数: 55733 | | q*c 发帖数: 9453 | 4 然后面试就 fail 了。
你这是考计算能力的时候给人演示自己会用计算器呢?
【在 l******t 的大作中提到】 : 会fold的话一个fold就干了
| i*******e 发帖数: 29 | 5 def print_combo(n):
q = []
re_print(q, 1, 100, n)
def re_print(q, h, t, n): # queue, head, tail, depth
if n == 0: # exit condition
print_array(q)
for i in range(h, t - n + 2):
re_print(q.append(i), i+1, t, n-1)
def print_array(q):
print(' '.join(q))
出来的永远是升序的排列,因此不会重复 |
|