[LeetCode系列]组合和枚举问题
给定一列数(未排序)和一个目标值, 找出所有可能的组合和等于目标值的组合, 数组中的数可以重复使用.
算法思路: 使用递归.
- 对数组排序, 从小到大;
 - 令i = 起始下标(初始为0), 对于每一个数,
- 如果它等于目标值, 则在缓存结果中加入此数并将缓存结果加入输出队列, 随后在缓存结果中删除此数;
 - 如果它小于目标值, 则在缓存结果中加入此数并递归调用此算法, 目标值更新为差值, 起始下标为i;
 - 如果它大于目标值, 算法返回.
 
 
对于2.2的理解: 如果这个数小于目标值, 由于算法是循环递归, 那么起始的下标必定不能小于i(否则出现重复情况).
代码:
 class Solution {
 public:
     vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
         vector<int> A(candidates);
         vector<int> oneRes;
         vector<vector<int> > result;
         sort(A.begin(), A.end());
         helper(A, target, oneRes, result, );
         return result;
     }
     void helper(vector<int> A, int target, vector<int> &oneRes, vector<vector<int> > &result, int start) {
         for (int i = start; i < A.size(); i++) {
             if (A[i] == target) {
                 oneRes.push_back(A[i]);
                 result.push_back(oneRes);
                 oneRes.pop_back();
             }
             else if (A[i] < target) {
                 oneRes.push_back(A[i]);
                 helper(A, target-A[i], oneRes, result, i);
                 oneRes.pop_back();
             }
             else return;
         }
     }
 };
[LeetCode系列]组合和枚举问题的更多相关文章
- [LeetCode系列]子集枚举问题[有重复元素]
		
给定一组数(未排序, 可能有重复元素), 求出所有可能的组合. 算法和无重复元素的相似. 唯一需要注意的是, 如果当前的数字和之前的相同, 算法就只会在结尾数字是此数字的组合后加上此数字. 比如现在是 ...
 - [LeetCode系列]子集枚举问题[无重复元素]
		
给定一组数(未排序), 求它们的所有组合可能. 如给定{1 2 3}, 返回: [ [] [1] [2] [3] [1 2] [1 3] [2 3] [1 2 3] ] 算法思路: 对数组排序, 从小 ...
 - leetcode 系列文章目录
		
leetcode 系列文章目录 0. 两数之和1. 两数相加 2. 无重复字符的最长子串 3. 寻找两个有序数组的中位数 4. 最长回文子串 5. Z 字形变换 6. 整数反转 7. 字符串转换整数 ...
 - C#刷遍Leetcode系列连载 索引
		
C#刷遍Leetcode系列文章 索引 索引(陆续发布中,请保持关注) C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介 C#刷遍Leetcode面试题系列连载(2): No.38 - ...
 - Leetcode系列之两数之和
		
Leetcode系列之两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一个答案.但是,你 ...
 - 又爱又恨系列之枚举enum
		
其实枚举挺简单的,只不过以前没好好学,所以不知道这个东西,恩,现在梳理一下 整体而言,首先枚举是一个数据类型,这个数据类型和结构体有点像 可以分为三个层次 1.枚举数据类型定义 第一种:enum 枚举 ...
 - Leetcode系列-Search in Rotated Sorted Array
		
做Leetcode题有一段时间了,但都是断断续续的,到现在才做了30题左右,感觉对自己来说还是有点难度的.希望自己能继续坚持下去,在校招前能解决超过一百题吧. 其实这些题就是用来训练你的解题思路的,做 ...
 - WorldWind源码剖析系列:枚举类型
		
PluginSDK中的枚举型主要有以下这些: public enum AltitudeMode//高度模式枚举 { ClampedToGround,//强制到地面模式 RelativeToGround ...
 - [LeetCode系列]最大连续子列递归求解分析
		
本文部分参考Discuss: LeetCode. 步骤1. 选择数组的中间元素. 最大子序列有两种可能: 包含此元素/不包含. 步骤2. 步骤2.1 如果最大子序列不包含中间元素, 就对左右子序列进行 ...
 
随机推荐
- 【BZOJ4819】新生舞会(分数规划,网络流)
			
[BZOJ4819]新生舞会(分数规划,网络流) 题面 BZOJ Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买 ...
 - PANDAS 数据合并与重塑(concat篇)
			
转自:http://blog.csdn.net/stevenkwong/article/details/52528616
 - 在接口请求时报错Unrecognized field "zZF1"
			
这个问题是json序列化问题,当参数中出现大写字母组成的字段时(例如:ZZF1),此时需在字段上加入注解:@JsonProperty(value = "ZZF1")
 - Python 常用 PEP8 编码规范
			
Python 常用 PEP8 编码规范 代码布局 缩进 每级缩进用4个空格. 括号中使用垂直隐式缩进或使用悬挂缩进. EXAMPLE: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
 - Maven 环境搭建及相应的配置
			
在一般的Java Web项目开发中,特别是基于Struts + hibernate + spring的框架的时候,会有很多的jar包,一般都会在项目文件中有一个lib文件夹,下面放所有相关的jar包. ...
 - bzoj1800
			
题解: 暴力枚举,然后判断是否是矩形 代码: #include<iostream> #include<cstdio> using namespace std; ],dis[]; ...
 - js  Worker 线程
			
在平时的运行的javascript脚本都在主线程中执行,如果当前脚本包含复杂的.耗时的代码.那么JavaScript脚本的执行将会被阻塞,甚至整个刘看齐都是提示失去响应. 例子: 假设程序需要计算.收 ...
 - RabbitMQ(4) 未路由的消息、TTL和死信
			
未路由的消息 当生产这发送的消息到达指定的交换器后,如果交换器无法根据自身类型.绑定的队列以及消息的路由键找到匹配的队列,默认情况下消息将被丢弃.可以通过两种方式 处理这种情况,一是在发送是设置man ...
 - Linux系统在启动过程中内核文件丢失的解决方法
			
在/boot目录下有两个重要的文件,分别是: vmlinuz-3.10.0-123.el7.x86_64 内核文件 initamfs-3.10.0-123.el7.x86_64.img ...
 - js中top、self、parent
			
1.在应用iframe或者frameset的时候 parent指的是父窗口.top指的是顶级的窗口.self指的是当前的窗口-window window.self 功能:是对当前窗口自身的引用.它和w ...