题解 | #牛群分组II#
牛群分组II
https://www.nowcoder.com/practice/9ebc32fee9b54bfa9f9c3deca80febb0
知识点:回溯
思路:题意,和上一题类似,上一题是让我们选出,目标凑齐的数字,但是可以重复,这题不能重复,我们只需要用一个数组进行标记即可,
编程语言:java
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param candidates int整型一维数组 * @param target int整型 * @return int整型二维数组 */ public int[][] cowCombinationSum2(int[] candidates, int target) { List<List<Integer>> result = new ArrayList<>(); Arrays.sort(candidates); backtrack(candidates, target, 0, new ArrayList<>(), result); int[][] ans = new int[result.size()][]; for (int i = 0; i < result.size(); i++) { ans[i] = result.get(i).stream().mapToInt(Integer::intValue).toArray(); } return ans; } public void backtrack(int[] candidates, int target, int start, List<Integer> tempList, List<List<Integer>> result) { //终止条件 if (target < 0) { return; } else if (target == 0) { result.add(new ArrayList<>(tempList)); return; } for (int i = start; i < candidates.length; i++) { if (i > start && candidates[i] == candidates[i - 1]) { continue; // 跳过重复的数字,避免重复组合 } tempList.add(candidates[i]); backtrack(candidates, target - candidates[i], i + 1, tempList, result); // 下一轮从 i+1 开始,避免重复选取同一个数字 tempList.remove(tempList.size() - 1); } } }