Leetcode题解(十四)
39、Combination Sum
题目
题目要求找出和为target的数字组合,并且每个整数可以多次使用。仔细思考可以发现,这道题目可以采用递归的方法来完成,比如举的例子,target=7,一开始可以选中2,并且2<7,因此,我只需要从[2,3,6,7]中寻找和为5(因为可以重复选择整数,因此需要从2开始而不是从下一个数3开始),如果后面的结果中找不出和为5,因此需要剔除当前选择的2,从下一个数3开始,按照这个递归继续执行。这样就把规模变小,代码如下:
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<int> temp;
vector<vector<int>> res;
sort(candidates.begin(), candidates.end());
combinationSum(candidates,,temp,res,target);
return res;
} void combinationSum(const vector<int>& candidates,int start,vector<int> &temp,vector<vector<int>> &res,int target)
{
if ( == target)
{ res.push_back(temp);
} for (int i=start;i<candidates.size();i++)
{
if(candidates[i]<=target)
{
temp.push_back(candidates[i]);
combinationSum(candidates,i,temp,res,target-candidates[i]);
temp.pop_back();
}
}
}
};
--------------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------
40、Combination Sum II
题目
这道题和上一题差别不到,唯一的差别就是每个数至多使用一次,因此在之前的代码中需要做一次数据过滤,代码如下:
class Solution {
public:
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
vector<int> temp;
vector<vector<int>> res;
sort(candidates.begin(), candidates.end());
combinationSum(candidates,,temp,res,target);
return res;
} void combinationSum(const vector<int>& candidates,int start,vector<int> &temp,vector<vector<int>> &res,int target)
{
if ( == target)
{ res.push_back(temp);
} for (int i=start;i<candidates.size();i++)
{ if(candidates[i]<=target)
{
temp.push_back(candidates[i]);
combinationSum(candidates,i+,temp,res,target-candidates[i]);
temp.pop_back();
while(i+<candidates.size() && candidates[i] == candidates[i+])//跳过后续相同的整数
i++;
}
}
}
};
----------------------------------------------------------------------------------分割线------------------------------------------------------------------------------------------
41、First Missing Positive
题目
这道题目技巧性很强,在网上查看资料之后才知道如何解答。其解答的思路是:如果0<nums[index]<size,就将nums[index]这个值交换到对应下标所在的空间去。比如题目中的[3,4,-1,1],一开始index=0,其值为3,因此将3交换到index=2(3-1)去,变成[-1,4,3,1],代码如下:
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
const int size = nums.size();
if( == size)
return ;
int i,index;
int temp;
for (i = ;i<size;i++)
{
index=i;
while(nums[index]>&&nums[index]<size&&nums[index] != index+)
{
if(nums[nums[index]-] == nums[index])
break;
temp = nums[nums[index]-];
nums[nums[index]-] = nums[index];
nums[index] = temp;
}
}
for(i = ;i<size;i++)
{
if(i+ != nums[i])
return i+;
}
if(i == size)
return size+; }
};
Leetcode题解(十四)的更多相关文章
- Leetcode题解(四)
12/13.Integer to Roman/Roman to Integer 题目 罗马数字规则: 符号 I V X L C D M 数字 1 5 10 50 100 500 1000 代码如下: ...
- LeetCode第二十四题-交换链表中节点值
Swap Nodes in Pairs 问题简介:给定链表,交换每两个相邻节点并返回链表. 举例: 输入:1->2->3->4 输出:2->1->4->3 链表结构 ...
- LeetCode第十四题-字符串数组中最长的共同前缀
Longest Common Prefix 问题简介: 编写一个函数来查找字符串数组中最长的公共前缀字符串,如果没有公共前缀,则返回空字符串"" 举例: 1: 输入: [“xwq” ...
- 网络流二十四题,题解summary
没有全部写完,有几题以后再补吧. 第一题:最简单的:飞行员配对方案问题 讲讲这个题目为什么可以用网络流? 因为这个题目是要进行两两之间的匹配,这个就可以想到用二分图匹配,二分图匹配又可以用网络流写. ...
- 3360: [Usaco2004 Jan]算二十四
3360: [Usaco2004 Jan]算二十四 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6 Solved: 6[Submit][Statu ...
- leetcode题解-122买卖股票的最佳时期
题目 leetcode题解-122.买卖股票的最佳时机:https://www.yanbinghu.com/2019/03/14/30893.html 题目详情 给定一个数组,它的第 i 个元素是一支 ...
- 【LeetCode题解】3_无重复字符的最长子串(Longest-Substring-Without-Repeating-Characters)
目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复 ...
- [LeetCode 题解] Spiral Matrix
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 题目链接 54. Spiral Matrix ...
- 【LeetCode题解】136_只出现一次的数字
目录 [LeetCode题解]136_只出现一次的数字 描述 方法一:列表操作 思路 Java 实现 Python 实现 方法二:哈希表 思路 Java 实现 Python 实现 方法三:数学运算 思 ...
- 【LeetCode题解】349_两个数组的交集
目录 [LeetCode题解]349_两个数组的交集 描述 方法一:两个哈希表 Java 实现 类似的 Java 实现 Python 实现 类似的 Python 实现 方法二:双指针 Java 实现 ...
随机推荐
- 凸包GiftWrapping GrahamScan 算法实现
开始 游戏内有需求做多边形碰撞功能,但是接入box2d相对游戏的需求来说太重度了.所以准备自己实现碰撞. 确定多边形,必然要用到凸包的算法.在github上也找到了一些lua实现,但是这里的算法没有考 ...
- Java 使用Axis实现WebService实例
在上一篇WebService实例中,基于jdk1.6以上的javax.jws 发布webservice接口.这篇博文则主要用eclipse/myeclipse 使用axis插件进行发布和调用WebSe ...
- angular学习-01,使用第三方库(jquery...)
开发环境(window) 1.安装node https://nodejs.org/en/ 2.安装angular-cli npm install -g @angular/cli 3.使用ng new ...
- EXTENDED LIGHTS OUT poj1222 高斯消元法
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6443 Accepted: 42 ...
- 如何修改select标签的默认下拉箭头样式?
对于一般的项目而言,select标签在浏览器中表现出来的默认样式也不算丑,但是一次项目中,项目经理却要求对select标签本身进行样式修改,美化其下拉小箭头的样式.我思考和尝试了许多方法,最终得到一种 ...
- 程序员网站开发时应该注意的SEO问题
一.链接的统一性 搜索引擎排名最主要的因素就是网站内容和链接,假如网站内部链接不一致,在很大程度上直接影响着网站在搜索引擎中的排名.例如彩票专营店导航栏中的“首页”链接,程序员在开发时可能会有以下几种 ...
- Ubuntu16.04 install OpenJDK8
1.按Ctrl + Alt + T打开终端.打开后,运行下面的命令来添加PPA:sudo add-apt-repository ppa:openjdk-r/ppa2.之后,更新系统包缓存并安装Open ...
- IntelliJ IDEA 14.1.4设置关闭自动保存和标志改动文件为星号?
一.设置取消默认的自动保存: 二.设置文件内容改动后为文件标题头部添加*号:
- DataGridView的使用记录
首先初始化 1 this.CheckView.Columns.Clear(); 2 DataGridViewComboBoxColumn dcomo = new DataGridViewComboBo ...
- GRE 协议简介
1. 协议简介 gre(generic routing encapsulation,通用路由封装)协议是对某些网络层协议(如ip 和ipx)的数据报进行封装,使这些被封装的数据报能够在另一个网络 ...