数据结构与算法练习60

组合总和二

在这里插入图片描述

解题思路:

和组合总和一样的思路。回溯。就是注意每一次起始索引要加一,还有要避免重复。

代码:

        public IList<IList<int>> CombinationSum2(int[] candidates, int target)
        {
            IList<IList<int>> result = new List<IList<int>>();
            IList<int> lgx = new List<int>();
            int begin = 0;
            Array.Sort(candidates);
            DFS2(candidates, target, begin, lgx, result);
            return result;
        }//40. 组合总和 II。
        public void DFS2(int[] candidates, int target, int begin, IList<int> lgx, IList<IList<int>> result)
        {
            if (target == 0)
            {
                result.Add(new List<int>(lgx));
                return;
            }
            for (int i = begin; i < candidates.Length; i++)
            {
                if (target - candidates[i] < 0)
                    break;
                if (i > begin && candidates[i] == candidates[i - 1])
                    continue;//避免选择重复的元素。
                lgx.Add(candidates[begin]);
                DFS2(candidates, target - candidates[i], i + 1, lgx, result);
                lgx.RemoveAt(lgx.Count - 1);
            }
        }//回溯。

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值