从数字列表中,任意三个相加为指定值的所有组合
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)
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)
相关文章推荐
- 编程练习:求和为指定数字的所有组合
- 如何将几个数字进行搭配相加,得出指定区间的组合
- 如何得到指定数字中任意几个数字的组合
- 输出1到N之间所有相加最接近M的数字组合【可参考更改为背包算法】
- 字母a-z,数字0-9,现需要其中任意3个作为密码,请输出所有可能组合。
- [面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合
- 有三个非零数,用它们可能组合的所有三位数之和是2886,若把三个数字自大到小排和自小到大排成三位数,差为495。求三数字。
- 【Java中 任意几个数字获取其所有的排列组合】
- 【Java中 任意几个数字获取其所有的排列组合】
- 求和为指定数字的所有组合
- 如何得到指定数字中任意几个数字的组合
- 任意数字、字符序列,输出它们所有的排列组合
- 设计一个算法找到数组中两个元素相加等于指定数的所有组合
- 如何计算出指定数字列表的组合数及组合明细
- java实现 数组中两个元素相加等于指定数的所有组合
- 求数组内任意三个数相加和为零的组合
- 求数值在 1 - 50 之内的任意5个数之和为100 。数值:1,2,3,4,5,6....48,49,50,取其中的任意5个数,但这5个数相加之和要等于100,并将所有这种组合罗列.
- 任意数字序列“123456”之类,输出它们所有的排列组合
- 一个有序正整数集S,若要保证整数集中所有的数通过组合(相加)可以表示1~N中任意一个正整数
- 1,2,5,10四个基数任意次数组合相加得到一个数N,求所有可能组合