- 浏览: 188291 次
- 性别:
- 来自: 济南
-
文章分类
最新评论
Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
The same repeated number may be chosen from C unlimited number of times.
Note:
All numbers (including target) will be positive integers.
Elements in a combination (a1, a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤ … ≤ ak).
The solution set must not contain duplicate combinations.
For example, given candidate set 2,3,6,7 and target 7,
A solution set is:
[7]
[2, 2, 3]
有关组合求和的问题,我们采用回溯法,从一条路走下去,如果找到结果就记录下来,如果走到尽头没找到结果就开始回溯,因为题目要求每个数字可以使用多次,因此我们往下寻找答案的起始点都是从当前元素开始。其次,题目要求结果集为非降序列,所以我们要先将数组排序在做处理。代码如下:
The same repeated number may be chosen from C unlimited number of times.
Note:
All numbers (including target) will be positive integers.
Elements in a combination (a1, a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤ … ≤ ak).
The solution set must not contain duplicate combinations.
For example, given candidate set 2,3,6,7 and target 7,
A solution set is:
[7]
[2, 2, 3]
有关组合求和的问题,我们采用回溯法,从一条路走下去,如果找到结果就记录下来,如果走到尽头没找到结果就开始回溯,因为题目要求每个数字可以使用多次,因此我们往下寻找答案的起始点都是从当前元素开始。其次,题目要求结果集为非降序列,所以我们要先将数组排序在做处理。代码如下:
public class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { LinkedList<Integer> list = new LinkedList<Integer>(); List<List<Integer>> llist = new LinkedList<List<Integer>>(); if(candidates == null || candidates.length == 0) return llist; java.util.Arrays.sort(candidates); getCombination(0, target, candidates, list, llist); return llist; } public void getCombination(int start, int target, int[] candidates, LinkedList<Integer> list, List<List<Integer>> llist) { for(int i = start; i < candidates.length; i++) { if(target > candidates[i]) { list.add(candidates[i]); getCombination(i, target - candidates[i], candidates, list, llist); list.removeLast(); } else if(target == candidates[i]) { list.add(candidates[i]); if(!llist.contains(list)) llist.add(new LinkedList<Integer>(list)); list.removeLast(); } else { return; } } } }
发表评论
-
498. Diagonal Traverse
2019-11-15 13:52 288Given a matrix of M x N eleme ... -
496 Next Greater Element I
2019-11-14 13:50 292You are given two arrays (witho ... -
Word Break II
2016-03-09 03:15 413Given a string s and a dictiona ... -
Insert Interval
2016-03-08 02:11 395Given a set of non-overlapping ... -
Merge Intervals
2016-03-07 05:25 521Given a collection of intervals ... -
Merge k Sorted Lists
2016-03-07 04:03 597Merge k sorted linked lists and ... -
Multiply Strings
2016-03-06 07:27 503Given two numbers represented a ... -
N-Queens II
2016-03-06 03:06 695Follow up for N-Queens problem. ... -
N-Queens
2016-03-06 02:47 495The n-queens puzzle is the prob ... -
First Missing Positive
2016-03-05 03:09 450Given an unsorted integer array ... -
Spiral Matrix
2016-03-04 03:39 611Given a matrix of m x n element ... -
Trapping Rain Water
2016-03-04 02:54 625Given n non-negative integers r ... -
Repeated DNA Sequences
2016-03-03 03:10 451All DNA is composed of a series ... -
Increasing Triplet Subsequence
2016-03-02 02:48 924Given an unsorted array return ... -
Maximum Product of Word Lengths
2016-03-02 01:56 950Given a string array words, fin ... -
LRU Cache
2016-02-29 10:37 625Design and implement a data str ... -
Super Ugly Number
2016-02-29 07:07 715Write a program to find the nth ... -
Longest Increasing Path in a Matrix
2016-02-29 05:56 895Given an integer matrix, find t ... -
Coin Change
2016-02-29 04:39 808You are given coins of differen ... -
Minimum Height Trees
2016-02-29 04:11 749For a undirected graph with tre ...
相关推荐
在这个Java代码中,我们首先定义了一个名为`Solution`的类,并在其中定义了一个名为`combinationSum`的方法。该方法接收两个参数:一个整数数组`candidates`和一个整数`target`。`candidates`数组中的元素可以无限次...
虽然问题表面上看起来和Combination Sum I类似,但Combination Sum II由于限制了数字的使用次数,使得问题复杂度有所提高。 在解决Combination Sum II时,首先需要对数组进行排序,排序的目的是为了在后续的递归...
其中,“Combination Sum III”是其中的一道典型的回溯算法题。 “Combination Sum III”题目要求给定一个范围,找出所有相加之和为特定值的k个数的组合。在这个问题中,所有数字必须是唯一的,且数字范围限制在1到...
public int combinationSum4(int[] nums, int target) { int[] dp = new int[target + 1]; dp[0] = 1; for (int i = 1; i ; i++) { for (int num : nums) { if (i >= num) { dp[i] += dp[i - num]; } } } ...
在JavaScript编程中,解决算法...function combinationSum(candidates, target) { let result = []; let combination = []; // 递归函数,用于回溯搜索 function backtrack(remain, combo, start) { if (remain
特别是算法题目,如216题——Combination Sum III,对于锻炼编程者的算法思维和代码实现能力有着重要作用。 Combination Sum III这道题目要求解的是找出所有和为特定值的组合,其中每个数字仅能使用一次,这些数字...
LeetCode题解之39-Combination Sum是一个典型的C语言算法问题,主要考察候选者对回溯算法的理解和实现能力。该问题的具体内容是找出所有相加之和为给定目标数target的组合,且每组中每个数字可以重复使用多次。解决...
文件标题"C语言-leetcode题解之40-combination-sum-ii.c"暗示了本文的内容是围绕LeetCode上的第40题"Combination Sum II"编写的题解,并且使用C语言来实现解决方案。第40题是组合总和问题的一个变种,要求在一组数字...
首先,“js-leetcode题解之40-combination-sum-II.js”是一份JavaScript编程语言实现的LeetCode算法题解。LeetCode是一个在线编程平台,主要提供算法训练和面试准备题目,题目涵盖从初级到高级的不同难度级别。这道...
239 Combination Sum II 579 240 Combination Sum III 581 241 Combinations 583 242 Letter Combinations of a Phone Number 587 243 Restore IP Addresses 589 244 Reverse Integer 591 245 Palindrome Number 593
代码首先定义了一个名为`Solution`的类,其中有两个方法:`bit1Count`和`combinationSum3`。`bit1Count`方法用于计算一个无符号整数中二进制形式的1的个数,而`combinationSum3`是解决该问题的主要方法。 在`bit1...
def combinationSum3(self, k: int, n: int, m: int, current_sum=0, current_combination=[], combinations=[]): if len(current_combination) == m and current_sum == k: combinations.append(current_...
Combination Sum组合总和 Crossword Puzzle Solver 填字游戏求解器 Generate Parentheses 生成括号 Hamiltonian Cycle 哈密顿循环 Knight Tour骑士之旅 Match Word Pattern 匹配单词模式 Minimax极大 极小 N QueensN...
public static List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> result = new ArrayList(); List<Integer> combination = new ArrayList(); Arrays.sort(candidates);...
在主函数`combinationSum2`中,我们先对输入的`candidates`进行排序,然后调用`backtrack`函数开始搜索过程。最终返回的结果集`res`包含了所有满足条件的组合。 通过以上代码,我们可以解决LeetCode第40题...
最后,`combinationSum2`是对外的公共接口,它初始化结果向量`vvi`,并调用`helper`函数开始搜索过程。 总的来说,这个手稿展示了如何使用C++实现一个基于回溯和剪枝的解决方案,来解决组合问题。通过理解这个示例...
vector<vector<int>> combinationSum(vector<int>& candidates, int target) { vector<vector<int>> result; vector<int> current; backtrack(candidates, target, result, current, 0); return result; } void...
java入门 java_leetcode题解之039_Combination_Sum