leetcode-39 组合(我恨组合)

本文介绍了一种使用递归算法解决组合总和问题的方法,通过不断寻找可以使总和接近目标值的数字组合,实现了对给定数字集合的遍历。文章详细解释了递归过程中的关键步骤,包括如何判断当前组合是否达到目标值,以及如何回溯并尝试不同的组合。

递归的思想:每一次的递归功能,我给它抽象为新找一个位,在该位上,这个数是可以变大的,以此来帮助sum变大从而匹敌 target。

这里有意思的地方在于每次都可以用原来的数。

(盗图~)

#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
    vector<vector<int>> combinationSum(vector<int> candidates, int target) {
    	if(candidates.size() < 0)
    		return {};
    	sort(candidates.begin(), candidates.end());
    	if(target < candidates[0])
    		return {};
        vector<vector<int> > result;
        vector<int> temp;
        int sum = 0;
        getBacking(result, temp, candidates, sum, 0, target);
        return result;
    }
    bool getBacking(vector<vector<int> >& result,vector<int>& temp, vector<int> nums, int sum, int k, int target){
    	// 若当前累计的数已经 比 target还要大了,我就 不额外再找一个数进行累加了
    	if(sum > target){
    		return false;
    	}else if(sum == target){
    		//如果外界让我再找一个数累加,但是我发现当前的值就已经足够了,不必再累加了,那么,我们就找到了答案
    		result.push_back(temp);
    		//因为当找到答案后,再累加也没有,所以干脆告诉上级,活干完了,你换下一个人吧。
    		return false;
    	}else{
    		for(int i=k;i<nums.size();i++){
    			//能到这里意味着当前的累计和sum比target值还小,还需要一个数值累加,而我们能让它类加的量为:nums【i】 --- nums[size-1]
    			temp.push_back(nums[i]);
    			sum += nums[i];
    			//ok,我加入了这个数了,但是,在让该位上的数循环变成更大一点的数前,我们看看是否还需要再加一个数,让这个数帮忙让sum更大一些。
    			bool flag = getBacking(result, temp, nums, sum, i, target);
    			// 不管我是否需要加入新的位 来帮忙增大sum,此刻,本身所在位的数值是必须要增大的
    			temp.pop_back();
    			//记得扣除
    			sum -= nums[i];
    			if(!flag){
    				//如果我们的孩子告诉我们,娘亲啊,你现在在这个位置加上的数就已经让sum超过了target,不能再让该位的值增大了,不然大清就亡了。
    				//so,我们要退出这个for,
    				//次外,如果当前为的值被加上后刚好等于目标,我们也不用继续在把该位上的值增加了,因为值只会越来越大。
    				break;
    			}
    			//如果没退出,那就把该位上的值增大
    		}
    		//对上层调用的函数而言,新加位的所有可能都已经试过了,所以要返回,并且让上一层所在的数值增大
    		return true;
    	}
    }
};
int main(){
	Solution s;
	vector<int> can(1,1);
	s.combinationSum(can,1);
	return 0;
}

 

这个是完整源码 python实现 Django 【python毕业设计】基于Python的天气预报(天气预测分析)(Django+sklearn机器学习+selenium爬虫)可视化系统.zip 源码+论文+sql脚本 完整版 数据库是mysql 本研究旨在开发一个基于Python的天气预报可视化系统,该系统结合了Django框架、sklearn机器学习库和Selenium爬虫技术,实现对天气数据的收集、分析和可视化。首先,我们使用Selenium爬虫技术从多个天气数据网站实时抓取气象数据,包括温度、湿度、气压、风速等多项指标。这些数据经过清洗和预处理后本研究旨在开发一个基于Python的天气预报可视化系统,该系统结合了Django框架、sklearn机器学习库和Selenium爬虫技术,实现对天气数据的收集、分析和可视化。首先,我们使用Selenium爬虫技术从多个天气数据网站实时抓取气象数据,包括温度、湿度、气压、风速等多项指标。这些数据经过清洗和预处理后,将其存储在后端数据库中,以供后续分析。 其次,采用s,将其存储在后端数据库中,以供后续分析。 其次,采用sklearn机器学习库构建预测模型,通过时间序列分析和回归方法,对未来天气情况进行预测。我们利用以往的数据训练模型,以提高预测的准确性。通过交叉验证和超参数优化等技术手段,我们优化了模型性能,确保其在实际应用中的有效性和可靠性。 最后,基于Django框架开发前端展示系统,实现天气预报的可视化。用户可以通过友好的界面查询实时天气信息和未来几天内的天气预测。系统还提供多种图表类型,包括折线图和柱状图,帮助用户直观理解天气变化趋势。 本研究的成果为天气预报领域提供了一种新的技术解决方案,不仅增强了数据获取和处理的效率,还提升了用户体验。未来,该系统能够扩展至其他气象相关的应用场景,为大众提供更加准确和及时的气象服务。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值