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题解(十四)的更多相关文章

  1. Leetcode题解(四)

    12/13.Integer to Roman/Roman to Integer 题目 罗马数字规则: 符号 I V X L C D M 数字 1 5 10 50 100 500 1000 代码如下: ...

  2. LeetCode第二十四题-交换链表中节点值

    Swap Nodes in Pairs 问题简介:给定链表,交换每两个相邻节点并返回链表. 举例: 输入:1->2->3->4 输出:2->1->4->3 链表结构 ...

  3. LeetCode第十四题-字符串数组中最长的共同前缀

    Longest Common Prefix 问题简介: 编写一个函数来查找字符串数组中最长的公共前缀字符串,如果没有公共前缀,则返回空字符串"" 举例: 1: 输入: [“xwq” ...

  4. 网络流二十四题,题解summary

    没有全部写完,有几题以后再补吧. 第一题:最简单的:飞行员配对方案问题 讲讲这个题目为什么可以用网络流? 因为这个题目是要进行两两之间的匹配,这个就可以想到用二分图匹配,二分图匹配又可以用网络流写. ...

  5. 3360: [Usaco2004 Jan]算二十四

    3360: [Usaco2004 Jan]算二十四 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 6  Solved: 6[Submit][Statu ...

  6. leetcode题解-122买卖股票的最佳时期

    题目 leetcode题解-122.买卖股票的最佳时机:https://www.yanbinghu.com/2019/03/14/30893.html 题目详情 给定一个数组,它的第 i 个元素是一支 ...

  7. 【LeetCode题解】3_无重复字符的最长子串(Longest-Substring-Without-Repeating-Characters)

    目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复 ...

  8. [LeetCode 题解] Spiral Matrix

    前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 题目链接 54. Spiral Matrix ...

  9. 【LeetCode题解】136_只出现一次的数字

    目录 [LeetCode题解]136_只出现一次的数字 描述 方法一:列表操作 思路 Java 实现 Python 实现 方法二:哈希表 思路 Java 实现 Python 实现 方法三:数学运算 思 ...

  10. 【LeetCode题解】349_两个数组的交集

    目录 [LeetCode题解]349_两个数组的交集 描述 方法一:两个哈希表 Java 实现 类似的 Java 实现 Python 实现 类似的 Python 实现 方法二:双指针 Java 实现 ...

随机推荐

  1. Opengl4.5 中文手册—C

    索引 A      B    C      D     E     F     G H      I    J      K     L     M     N O      P    Q      ...

  2. Spring事务源码阅读笔记

    1. 背景 本文主要介绍Spring声明式事务的实现原理及源码.对一些工作中的案例与事务源码中的参数进行总结. 2. 基本概念 2.1 基本名词解释 名词 概念 PlatformTransaction ...

  3. 18.Llinux-触摸屏驱动(详解)

    本节的触摸屏驱动也是使用之前的输入子系统 1.先来回忆之前第12节分析的输入子系统 其中输入子系统层次如下图所示, 其中事件处理层的函数都是通过input_register_handler()函数注册 ...

  4. Java数据结构和算法总结-冒泡排序、选择排序、插入排序算法分析

    前言:排序在算法中的地位自然不必多说,在许多工作中都用到了排序,就像学生成绩统计名次.商城商品销量排名.新闻的搜索热度排名等等.也正因为排序的应用范围如此之广,引起了许多人深入研究它的兴趣,直至今天, ...

  5. UWP 改变Button样式

    -----some words------ 1.Control:控制 (我们理解成控件) 2.Template:模板 3.Ellipse 椭圆 4.Content 内容 5.Presenter 节目主 ...

  6. C#.net干货,最全公共帮助类

    比较全面的c#帮助类,日常工作收集,包括前面几家公司用到的,各式各样的几乎都能找到,所有功能性代码都是独立的类,类与类之间没有联系,可以单独引用至项目,分享出来,方便大家,几乎都有注释,喜欢的请点赞, ...

  7. EXISTS/NOT EXISTS CASE WHEN等使用方法

    --简单判断用法 WHERE EXISTS (SELECT * FROM cpay..System_Setting) --可以替换count ) FROM cpay..System_Setting U ...

  8. Linux上的文件搜索

    locate 基础了解 在centos7上默认没有locate命令,需要先手动安装.安装步骤:http://www.cnblogs.com/feanmy/p/7676717.html locate命令 ...

  9. 2017-03-02学习心得之Java代码

    package com.lovo.classes;import java.util.Random;import java.util.TreeSet;import java.util.Scanner;p ...

  10. 虚拟机VMware-workstation-full-12.5.2安装注册方法(附安装包下载链接)

    首先,需要下载好虚拟机的安装包: 链接:http://pan.baidu.com/s/1mix3fFa 密码:6ftu 下载好后,双击安装程序,弹出安装界面,然后按照红色圈圈的指示进行安装操作,完成安 ...