C# 从一组数中获取指定和的组合

现在有个需求,要从一组数中获取和值等于指定数的组合方式。

例如 数组 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;
        }

运算结果和上面的一样

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值