The*_*ost 9 f# combinations functional-programming list simplify
关于F#中元素组合的最优雅和简单实现的另一个问题.
它应该返回输入元素的所有组合(列表或序列).第一个参数是组合中的元素数量.
例如:
comb 2 [1;2;2;3];;
[[1;2]; [1;2]; [1;3]; [2;2]; [2;3]; [2;3]]
Run Code Online (Sandbox Code Playgroud)
The*_*ost 10
比ssp更简洁,更快速的解决方案:
let rec comb n l =
match n, l with
| 0, _ -> [[]]
| _, [] -> []
| k, (x::xs) -> List.map ((@) [x]) (comb (k-1) xs) @ comb k xs
Run Code Online (Sandbox Code Playgroud)
let rec comb n l =
match (n,l) with
| (0,_) -> [[]]
| (_,[]) -> []
| (n,x::xs) ->
let useX = List.map (fun l -> x::l) (comb (n-1) xs)
let noX = comb n xs
useX @ noX
Run Code Online (Sandbox Code Playgroud)