leetcode216_组合总数3---回溯法

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

说明:

所有数字都是正整数。
解集不能包含重复的组合。 
示例 1:

输入: k = 3, n = 7
输出: [[1,2,4]]
示例 2:

输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]

 

思路:

和前两题差不多  都可以用回溯法进行求解 因为不能重复 所以需要start  下一次递归都从start+1开始

贴代码:

// k个数 和为n
	public static List<List<Integer>> combinationSum3(int k, int n) {
		List<List<Integer>> res = new ArrayList<List<Integer>>();
		if (k < 1 || n < 1) {
			return res;
		}
		ArrayList<Integer> list = new ArrayList<>();
		// 回溯递归
		backtrack(k, n, res, list, 1);
		return res;
	}

	private static void backtrack(int k, int target, List<List<Integer>> res, ArrayList<Integer> list, int start) {
		//先判断
		if (target == 0 && k == 0) {
			res.add(new ArrayList<>(list));
			return;
		}
		if (target < 0 || k <= 0)  //后判断 因为都有k=0情况
			return;
		for (int i = start; i <= 9 && target >= i; i++) {
			list.add(i);
			backtrack(k - 1, target - i, res, list, i + 1);
			list.remove(list.size() - 1);
		}

	}

可以将这三道题结合看  就会有回溯的一点感悟。

全部评论

相关推荐

10-22 12:03
山东大学 Java
程序员小白条:26届一般都得有实习,项目可以随便写的,如果不是开源社区的项目,随便包装,技术栈也是一样,所以本质应该找学历厂,多投投央国企和银行,技术要求稍微低一点的,或者国企控股那种,纯互联网一般都得要干活
应届生简历当中,HR最关...
点赞 评论 收藏
分享
10-30 19:23
已编辑
山东大学(威海) C++
牛至超人:我了个雷 1.实习经历写太长了吧,精简一点,你写那么老多,面试官看着都烦 2.项目经历你放俩竞赛干啥单独拿出来写上几等奖就行了呗 3.一大雷点就是项目经历里的那个课程设计,大家都知道课程设计巨水,不要写课程设计,换一个名字,就叫学生管理系统,面试官问就说是自己做的项目,不要提课程设计的事 4.那个交流经历,简化一下塞到最上面的教育经历里就行了 5.简历尽量一页纸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务