leetcode 216. Combination Sum III DFS + 按照index递归遍历
来源:互联网 发布:电脑看片有什么软件 编辑:程序博客网 时间:2024/06/06 02:08
Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.
Example 1:
Input: k = 3, n = 7
Output:
[[1,2,4]]
Example 2:
Input: k = 3, n = 9
Output:
[[1,2,6], [1,3,5], [2,3,4]]
一个典型的DFS深度优先遍历,是一个很经典的问题。
要和这道题leetcode 39. Combination Sum DFS深度优先搜索 和这道题leetcode 40. Combination Sum II DFS深度优先搜索 当到一起学习。
代码如下:
import java.util.ArrayList;import java.util.List;/* * 类似全排列的问题 * */public class Solution { List<List<Integer>> res=new ArrayList<>(); public List<List<Integer>> combinationSum3(int k, int n) { List<Integer> one=new ArrayList<>(); if(k<=0 || n<=0) return res; getAll(1,k,n,0,one); return res; } private void getAll(int level,int k, int n,int sum,List<Integer> one) { if(k==0 && sum==n) res.add(new ArrayList<>(one)); else if(k==0 || sum>n) return; else { for(int i=level;i<=9;i++) { one.add(i); getAll(i+1, k-1, n, sum+i, one); one.remove(one.size()-1); } } }}
下面是C++的做法,就是做一个DFS深度优先遍历,注意递归出口条件的判断的先后顺序
代码如下:
#include <iostream>#include <vector>#include <queue>#include <stack>#include <string>#include <set>#include <map>#include <algorithm>using namespace std;class Solution {public: vector<vector<int>> res; vector<vector<int>> combinationSum3(int k, int n) { if (k <= 0 || n <= 0) return res; getAll(1, k, n, 0, vector<int>()); return res; } void getAll(int level, int k, int n, int sum, vector<int> one) { if (k == 0 && sum == n) res.push_back(one); else if (k == 0 || sum > n) return; else { for (int i = level; i <= 9; i++) { one.push_back(i); getAll(i + 1, k - 1, n, sum + i, one); one.erase(one.end() - 1); } } }};
阅读全文
0 0
- leetcode 216. Combination Sum III DFS + 按照index递归遍历
- LeetCode Combination Sum III DFS
- leetcode Combination Sum III-回溯|递归
- [leetcode] 216.Combination Sum III
- LeetCode 216. Combination Sum III
- 216. Combination Sum III LeetCode
- [leetcode] 216. Combination Sum III
- [LeetCode]216. Combination Sum III
- leetcode 216. Combination Sum III
- LeetCode *** 216. Combination Sum III
- LeetCode 216. Combination Sum III
- leetcode.216. Combination Sum III
- leetcode 216. Combination Sum III
- [Leetcode]216. Combination Sum III
- [leetcode] 216. Combination Sum III
- 【leetcode】216. Combination Sum III
- LeetCode 216. Combination Sum III
- leetcode:216. Combination Sum III
- com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte
- js 判断数组 对象 为空
- access 学习记录
- 创建第一个Maven项目
- Java之正则表达式的组概念-yellowcong
- leetcode 216. Combination Sum III DFS + 按照index递归遍历
- node 实现城市列表A-Z 排序
- springboot websocket 解决不能注入bean问题
- 我理解的进程与线程
- 千视通旗下深圳久凌摘得2017第九届中国深圳创新创业大赛三等奖
- python3.5 实现图片转文字
- Eclipse单元测试-最大子数组和算法
- Java并发之线程间的协作
- 软件版本号命令规则