您的位置:首页 > 其它

从数字列表中,任意三个相加为指定值的所有组合

2013-02-05 16:44 225 查看
从数字列表中,任意三个相加为指定值的所有组合

let rec subsets s =

set [ yield s

for e in s do

yield! subsets (Set.remove e s)]

|> Set.toList

subsets (set [1..5])

subsets (set [0;1;2;3;5;7;9;11;4])

subsets (set [0;1;2;3;5;7;9;11])

|> List.filter(fun i -> i.Count = 3)

|> List.map(fun i -> Set.toList i)

|> List.filter(fun i -> List.sum(i) = 12)

下面的这个,不需要进行转换,就更合理了,速度也更快。

let rec subs = function

| [] -> [[]]

| x::xs -> [ for ys in subs xs do

yield! [ys;x::ys] ]

subs [0;1;2;3;5;7;9;11;4]
|> List.filter(fun i -> i.Length = 3)
|> List.filter(fun i -> List.sum(i) = 12)

===============================

let rec powerset = function

| [] -> [[]]

| h::t -> List.fold (fun xs e -> (h::e)::e::xs) [] (powerset t);
powerset [0;1;2;3;5;7;9;11;4]

|> List.filter(fun i -> i.Length = 3)

|> List.filter(fun i -> List.sum(i) = 12)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐