Java——组合总和(3)

编程入门 行业动态 更新时间:2024-10-26 00:25:45

Java——<a href=https://www.elefans.com/category/jswz/34/1769978.html style=组合总和(3)"/>

Java——组合总和(3)

题目链接

leetcode在线oj——组合总和(3)

题目描述

找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:

只使用数字1到9
每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

题目示例

输入: k = 3, n = 7
输出: [[1,2,4]]
解释:
1 + 2 + 4 = 7
没有其他符合的组合了。

输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]
解释:
1 + 2 + 6 = 9
1 + 3 + 5 = 9
2 + 3 + 4 = 9
没有其他符合的组合了。

输入: k = 4, n = 1
输出: []
解释: 不存在有效的组合。
在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。

题目提示

  • 2 <= k <= 9
  • 1 <= n <= 60

题目思路

我们可以使用递归,将所有可能的组合方式都排列出来,然后验证其总和是否为n,如果是n就将结果添加到list中

我们需要一个全局变量list,在所有递归中使用,并且递归需要定义当前的位置,1-9一共n个,数字总数k,需要的组合的总和sum,如果当前list的size已经超过k,或者就算当前list加上后面所有的数字都无法到达k个,说明已经不满足条件了,就返回上一个状态

如果当前list的size正好等于k,那么就验证list所有数字加起来是否为n,是就添加进result中,否则就返回上一个状态

完整代码

class Solution {List<List<Integer>> result = new ArrayList<>();List<Integer> list = new ArrayList<>();public List<List<Integer>> combinationSum3(int k, int n) {dfs(1, 9, k, n);return result;}private void dfs(int cur, int n, int k, int sum) {if(list.size() + (n - cur + 1) < k || list.size() > k){return;}if(list.size() == k){int count = 0;for (int x:list) {count += x;}if(count == sum){result.add(new ArrayList(list));return;}}list.add(cur);dfs(cur + 1, n, k, sum);list.remove(list.size() - 1);dfs(cur + 1, n, k, sum);}
}

代码执行流程图

更多推荐

Java——组合总和(3)

本文发布于:2024-03-06 10:55:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1715142.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:组合   总和   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!