java设计一个函数,给定一个由整数组成的列表集合nums和一个整数target,其中列表中数值不重复,设计一个程序,找出列表集合中所有相加等于target的组合并输出在控制台上,要求输出的组合不能重复
时间: 2023-06-06 16:08:19 浏览: 131
好的,我理解了你的要求。以下是针对你的问题的代码实现:
```
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TargetSum {
public List<List<Integer>> findTargetSum(int[] nums, int target) {
Arrays.sort(nums); // 首先将数组排序
List<List<Integer>> res = new ArrayList<>(); // 保存结果的列表
backtrack(nums, target, 0, new ArrayList<>(), res); // 开始回溯
return res;
}
private void backtrack(int[] nums, int target, int start, List<Integer> temp, List<List<Integer>> res) {
if (target == 0) { // 如果 target 已经为 0,说明找到了一组解
res.add(new ArrayList<>(temp));
return;
} else if (target < nums[start]) { // 如果 target 已经小于当前元素,说明后续肯定不可能有解
return;
}
for (int i = start; i < nums.length; i++) {
if (i > start && nums[i] == nums[i - 1]) { // 如果当前元素和上一个元素相同,则跳过当前元素
continue;
}
temp.add(nums[i]); // 将当前元素加入临时列表
backtrack(nums, target - nums[i], i + 1, temp, res); // 继续回溯
temp.remove(temp.size() - 1); // 回溯完毕,将当前元素移除
}
}
public static void main(String[] args) {
int[] nums = {10, 1, 2, 7, 6, 1, 5};
int target = 8;
List<List<Integer>> res = new TargetSum().findTargetSum(nums, target);
System.out.println(res);
}
}
```
这段代码可以找出列表集合中所有相加等于 target 的组合,并输出在控制台上。你可以根据需要将题目中给出的数组替换成你自己的数组,然后执行代码进行测试。
阅读全文