Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.
Ensure that numbers within the set are sorted in ascending order.
Example 1:Input: k = 3, n = 7 Output: [[1,2,4]]
Example 2:Input: k = 3, n = 9 Output: [[1,2,6], [1,3,5], [2,3,4]]
[balabala] 这题本身思路是常规的递归回溯,奇怪的是实现1可以被Accept,实现2会编译不通过,但是在Eclipse中是可以编译通过的,只是有个warning。回头有时间查查这部分JAVA语法。
// Implementation 1: Accept public List<List<Integer>> combinationSum3(int k, int n) { ArrayList<Integer> item = new ArrayList<Integer>(); List<List<Integer>> result = new ArrayList<List<Integer>>(); recur(1, k, n, result, item); return result; } private void recur(int start, int k, int n, List<List<Integer>> result, ArrayList<Integer> item) { if (k == 0) { if (n == 0) result.add((List<Integer>) item.clone()); return; } for (int i = start; i <= 9; i++) { item.add(i); recur(i + 1, k - 1, n - i, result, item); item.remove(item.size() - 1); } } // Implementation 2: Compiler Error public ArrayList<ArrayList<Integer>> combinationSum3(int k, int n) { ArrayList<Integer> item = new ArrayList<Integer>(); ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); recur(1, k, n, result, item); return result; } private void recur(int start, int k, int n, ArrayList<ArrayList<Integer>> result, ArrayList<Integer> item) { if (k == 0) { if (n == 0) result.add((ArrayList<Integer>) item.clone()); return; } for (int i = start; i <= 9; i++) { item.add(i); recur(i + 1, k - 1, n - i, result, item); item.remove(item.size() - 1); } }
相关推荐
python python_leetcode题解之216_Combination_Sum_III.py
java java_leetcode题解之Combination Sum III.java
c语言入门 C语言_leetcode题解之39-combination-sum.c
c语言入门 C语言_leetcode题解之40-combination-sum-ii.c
js js_leetcode题解之39-combination-sum.js
js js_leetcode题解之40-combination-sum-II.js
java入门 java_leetcode题解之039_Combination_Sum
combination sum: 39, 40, 216 - palindrome partitioning - regex - sudoku solver: 37 排序 - merge sort - quick sort - insertion sort - selection sort - counting sort 位操作 - find the only element which...
- Combination Sum: 找出所有相加之和为特定值的组合。 - First Missing Positive: 找出数组中缺失的最小正数。 - Trapping Rain Water: 给定一个数组,其中每个元素代表一个宽度为1的柱子高度,计算能接多少雨水。 ...
java java_leetcode题解之Combination Sum.java
java java_leetcode题解之Combination Sum IV.java
java java_leetcode题解之Combination Sum II.java
leetcode怎么销号 LeetCode-Solutions :green_heart:My own LeetCode solutions No. Problem LeetCode 力扣 Python Go Solution Difficulty Tag 0017 Letter Combinations of a Phone Number Medium 回溯、暴力 0034...
9. **模拟和回溯**:对于某些组合优化问题,可以使用回溯法来枚举所有可能的解决方案,例如"组合总和"(Combination Sum)。 10. **排序与堆**:数组的排序问题可以通过快速排序、归并排序等经典算法解决,而"最大...
leetcode怎么计算空间复杂度是指 LeetCode-Solution my first solution of LeetCode 2015-5-7 Problem 95,98(80 already!) 我经常在递归的结束地方忘记return!!! 题型一:经典暴力递归:(里面涉及到重复不重复的...
4. **回溯**:回溯是一种解决约束满足问题的算法,常用于“组合总和”(Combination Sum)、“N 皇后问题”(N-Queens)等。JavaScript 中回溯算法往往结合递归来实现。 5. **动态规划**:动态规划是解决优化问题的...
第 296 章PY 和 GO 中的 Leetcode 我在 Python Golang ...Leetcode ...40:combination-sum-ii:传递最后选择的索引 41:先缺失正,交换 42:只是提醒:块 - 垃圾箱 43:多字符串,i+j,i+j+1 44:通配符
而回溯法常用于解决组合优化问题,如"Combination Sum"(组合求和),在Java中通常结合递归来实现。 三、深度优先搜索与广度优先搜索 DFS(深度优先搜索)和BFS(广度优先搜索)是图论和树形结构中常用的算法。Java...