首页 > 其他分享 >力扣-216-组合总和Ⅲ

力扣-216-组合总和Ⅲ

时间:2022-12-09 10:24:53浏览次数:41  
标签:216 return cur temp int res 力扣 vector 总和

仍旧是有一个目标和,但是另一个条件变了

  • 从给定的数组元素中选择变成了从1-9中固定选择
  • 不限结果数组元素个数变成了限制k个数字

(看起来有点像组合的加强版)
从1-9中选择k个数字组合,使得他们的和=n

嗯…那我不是对组合的结果筛一筛既可以了?!

class Solution {
public:
	vector<vector<int>> res;
	vector<int> temp;
	vector<vector<int>> combinationSum3(int k, int n) {
		backTrack(k, n, 1);
		return res;
	}

	void backTrack(int k,int n,int cur) {
		if (temp.size() == k && accumulate(temp.begin(), temp.end(), 0) == n) {
			res.push_back(temp);
			return;
		}
		for (int i = cur; i <= 9; i++) {
			temp.push_back(i);
			backTrack(k, n, i + 1);
			temp.pop_back();
		}
	}
};

当然直接调函数是最快的,也是思路最清晰的,但是不是效率最高的,因为它计算了所有的组合
所以我们尝试优化一下,其实就是之前的老办法

class Solution {
public:
	vector<vector<int>> res;
	vector<int> temp;
	vector<vector<int>> combinationSum3(int k, int n) {
		backTrack(k, n, 1);
		return res;
	}

	void backTrack(int k,int target,int cur) {
		if (target < 0) return;
		if (temp.size() == k && target==0) {
			res.push_back(temp);
			return;
		}
		for (int i = cur; i <= 9; i++) {
			temp.push_back(i);
			backTrack(k, target-i, i + 1);
			temp.pop_back();
		}
	}
};

标签:216,return,cur,temp,int,res,力扣,vector,总和
From: https://www.cnblogs.com/yaocy/p/16968196.html

相关文章

  • 力扣-40-组合总和Ⅱ
    复习下原题,之前做过的,4个月前了第一眼看到觉得是完全背包,但是好像不太一样然后想到了回溯我很快写了一个标准的回溯出来,但是意识到好像不太对classSolution{public:......
  • 力扣 leetcode 40. 组合总和 II
    问题描述给定一个候选人编号的集合candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使......
  • 力扣 leetcode 39. 组合总和
    问题描述给你一个无重复元素的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的所有不同组合,并以列表形式返回。你可......
  • 200002 计算总和已知多个数值
    <?phpheader('Content-Type:text/html;charset=utf-8');define('ROOT',$_SERVER['DOCUMENT_ROOT']);includeROOT.'/assets/php/head.php';$tit='计算总和已知多......
  • 二进制链表转整数 从链表中删去总和值为零的连续节点 判断国际象棋棋盘中一个格子的
    1290.二进制链表转整数val提取出来,再加权intlen=0;Listlist=newArrayList<>();for(ListNodecur=head;cur!=null;cur=cur.next){list.add(cur.val);......
  • 力扣14 寻找字符串数组中最长公共前缀
    力扣14寻找字符串数组中最长公共前缀题目:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入:strs=["flower","flow",......
  • 力扣 501. 二叉搜索树中的众数
    501.二叉搜索树中的众数给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回BST中的所有 众数(即,出现频率最高的元素)。如果树中有不止一个众数,可以按 ......
  • 力扣 230. 二叉搜索树中第K小的元素
    230.二叉搜索树中第K小的元素给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从1开始计数)。示例1:输入:root=......
  • 力扣 leetcode 78. 子集
    问题描述给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。提示:1<=nums.le......
  • 力扣-77-组合
    直达链接这个问题应该就是我想找的答案了,把k=1~n全部输出一遍然后如果k=n,那就是全排列问题不对,还是不一样,这里只考虑数字组合,而没考虑数字顺序也就是排列问题两种解法,第......