现在有个需求,要从一组数中获取和值等于指定数的组合方式。
例如 数组 Arr={1,2,3,4,5,6,7,8,9}
需要得到所有合值为 12 的组合。
目测为 {1,2,9},{1,3,8},{1,4,7},{1,5,6},{3,2,7},{4,2,6},{3,4,5},{3,9},{4,8},{5,7},{1,2,3,6},{1,2,4,5}。
这个里需要用到递归运算求得
废话少说直接上代码。
private static List<int> numGroupRows(List<int> arr, int sum, int start = 0)
{
List<int> find = new List<int>();
for (int i = start; i < arr.Count; i++)
find.Add(arr[i]);
find = find.FindAll(S => S == sum);
if (find.Count > 0)
{
find = new List<int> { find[0] };
flag = true;
return find;
}
else
{
for (int i = start; i < arr.Count; i++)
{
int qty = arr[i];
if (qty < sum)
{
find.Add(arr[i]);
sum -= qty;
}
List<int> findTem = numGroupRows(arr, sum, i + 1);
if (findTem.Count > 0)
{
find.AddRange(findTem);
}
else
{
find.Remove(arr[i]);
sum += qty;
}
if (flag)
{
break;
}
}
}
return find;
}
运算结果和上面的一样