使用JAVA语言,写一段代码,实现给定一个数组nums=[2,3,5]和一个固定的值target=8。找出数组nums中所有可以使数字和为target的组合(数字可重复)
时间: 2023-04-08 13:03:05 浏览: 96
好的,这是一个关于编程的问题,我可以回答。以下是使用JAVA语言实现的代码:
```
import java.util.ArrayList;
import java.util.List;
public class Solution {
public List<List<Integer>> combinationSum(int[] nums, int target) {
List<List<Integer>> res = new ArrayList<>();
backtrack(res, new ArrayList<>(), nums, target, 0);
return res;
}
private void backtrack(List<List<Integer>> res, List<Integer> temp, int[] nums, int remain, int start) {
if (remain < 0) {
return;
} else if (remain == 0) {
res.add(new ArrayList<>(temp));
} else {
for (int i = start; i < nums.length; i++) {
temp.add(nums[i]);
backtrack(res, temp, nums, remain - nums[i], i);
temp.remove(temp.size() - 1);
}
}
}
}
```
这段代码使用了回溯算法来找出所有可以使数字和为target的组合。具体来说,我们定义了一个backtrack函数,它接收一个结果列表res、一个临时列表temp、一个数字数组nums、一个目标值remain和一个起始位置start。在函数中,我们首先判断remain是否小于0,如果是,直接返回;如果remain等于0,说明我们已经找到了一组符合要求的组合,将temp加入到res中;否则,我们从start开始遍历nums数组,每次将当前数字加入到temp中,然后递归调用backtrack函数,将remain减去当前数字,并且起始位置仍然是i,因为数字可以重复使用。递归调用结束后,我们将temp中的最后一个数字删除,回溯到上一层。
使用这段代码,我们可以得到nums=[2,3,5],target=8的所有组合,结果为:
```
[
[2, 2, 2, 2],
[2, 3, 3],
[3, 5]
]
```
希望这个回答能够帮到你!
阅读全文