如果您只需要所有可能的总和,那么您可以使用此功能.
public static IEnumerable<int> GetSums(List<int> list)
{
return from m in Enumerable.Range(0, 1 << list.Count)
select
(from i in Enumerable.Range(0, list.Count)
where (m & (1 << i)) != 0
select list[i]).Sum();
}
Run Code Online (Sandbox Code Playgroud)
然后,就这样称呼它:
var result = GetSums(myList).ToList();
Run Code Online (Sandbox Code Playgroud)
其他信息:
您也可以使用此方法生成组合(源):
public static IEnumerable<IEnumerable<T>> GetPowerSet<T>(List<T> list)
{
return from m in Enumerable.Range(0, 1 << list.Count)
select
from i in Enumerable.Range(0, list.Count)
where (m & (1 << i)) != 0
select list[i];
}
Run Code Online (Sandbox Code Playgroud)
并Sum()在System.Linq命名空间中使用方法帮助查找所有组合的总和:
var result = GetPowerSet(myList).Select(x => x.Sum()).ToList();
Run Code Online (Sandbox Code Playgroud)