java 数字中抽取几个数字允许数组中数字重复 使和为10
时间: 2024-05-15 20:13:14 浏览: 8
可以使用回溯算法来解决这个问题。
具体的思路是,对于每个数字,我们可以选择选或者不选,如果选择了,就将该数字加入到当前的和中,并且递归地考虑剩余的数字。如果不选择,就直接递归考虑剩余的数字。当当前的和等于目标值10时,就输出当前的方案。
下面是一个示例代码:
```
public static void findSum(int[] nums, int targetSum) {
List<Integer> path = new ArrayList<>();
findSumHelper(nums, 0, targetSum, path);
}
private static void findSumHelper(int[] nums, int start, int targetSum, List<Integer> path) {
if (targetSum == 0) {
// 找到了一个方案
System.out.println(path);
return;
}
if (targetSum < 0 || start >= nums.length) {
// 已经超出了范围
return;
}
// 选当前数
path.add(nums[start]);
findSumHelper(nums, start, targetSum - nums[start], path);
path.remove(path.size() - 1);
// 不选当前数
findSumHelper(nums, start + 1, targetSum, path);
}
```
可以这样调用这个函数:
```
int[] nums = {1, 2, 3, 4, 5};
findSum(nums, 10);
```
输出结果为:
```
[1, 1, 1, 1, 1, 5]
[1, 1, 1, 1, 2, 4]
[1, 1, 1, 2, 2, 3]
[1, 1, 2, 2, 2, 2]
[1, 2, 2, 2, 3]
[1, 1, 1, 1, 3, 3]
[1, 1, 2, 3, 3]
[1, 1, 4, 4]
[2, 2, 2, 2, 2]
[2, 3, 5]
[3, 3, 4]
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)