找出所有方案

排列和组合问题

排列:

https://www.lintcode.com/problem/combination-sum/description

 public class Solution {
/**
* @param candidates: A list of integers
* @param target: An integer
* @return: A list of lists of integers
*/
public List<List<Integer>> combinationSum(int[] candidates, int target) {
// write your code here
List<List<Integer>> results = new ArrayList<>();
if(candidates == null){
return results;
}
Arrays.sort(candidates); List<Integer> combination = new ArrayList<>();
helper(candidates,0,results,target,combination); return results;
} //1.定义:找到所有combination开头的组合,后面的和是target的组合
private void helper(int[] candidates,
int startIndex, List<List<Integer>> results,
int target,List<Integer> combination){
//3.出口
if(target==0){
results.add(new ArrayList<Integer>(combination));
return;
}
//2.拆解
for(int i = startIndex;i<candidates.length;i++){
if(target<candidates[i]){
break;
} if(i-1>=0 && candidates[i]==candidates[i-1]){
continue;
} combination.add(candidates[i]);
helper(candidates,i,results,target-candidates[i],combination);
combination.remove(combination.size()-1);
}
}
}

https://www.lintcode.com/problem/combination-sum-ii/description

 public class Solution {
/**
* @param num: Given the candidate numbers
* @param target: Given the target number
* @return: All the combinations that sum to target
*/
public List<List<Integer>> combinationSum2(int[] num, int target) {
// write your code here
List<List<Integer>> results = new ArrayList<>();
if(num == null){
return results;
} Arrays.sort(num); List<Integer> combination = new ArrayList<>();
helper(num,0,results,target,combination); return results;
} private void helper(int[]num,int startIndex,List<List<Integer>> results,
int target,List<Integer> combination){
if(target == 0){
results.add(new ArrayList<Integer>(combination));
return;
} for(int i = startIndex;i<num.length;i++){
if(target<num[i]){
break;
} if(i-1>=0 && i!=startIndex && num[i]==num[i-1]){
continue;
} combination.add(num[i]);
helper(num,i+1,results,target-num[i],combination);
combination.remove(combination.size()-1);
}
} }

切割问题

N个字母的字符串对应N-1个数字的组合

N个字符的字符串 子串:O(N^2)个

排列:

https://www.lintcode.com/problem/permutations/description

 public class Solution {
/*
* @param nums: A list of integers.
* @return: A list of permutations.
*/
public List<List<Integer>> permute(int[] nums) {
// write your code here
List<List<Integer>> rst = new ArrayList<>();
if(nums==null){
return rst;
} if(nums.length ==0){
rst.add(new ArrayList<>());
return rst;
} List<Integer> list = new ArrayList<>();
helper(rst,list,nums);
return rst;
} private void helper(List<List<Integer>> rst, List<Integer> list, int[] nums){
if(list.size()==nums.length){
rst.add(new ArrayList<Integer>(list));
return;
} for(int i=0;i<nums.length;i++){
if(list.contains(nums[i])){
continue;
} list.add(nums[i]);
helper(rst,list,nums);
list.remove(list.size()-1);
}
}
}

https://www.lintcode.com/problem/permutations-ii/description

 public class Solution {
/*
* @param : A list of integers
* @return: A list of unique permutations
*/
public List<List<Integer>> permuteUnique(int[] nums) {
// write your code here
List<List<Integer>> rst = new ArrayList<>();
if(nums==null){
return rst;
} if(nums.length ==0){
rst.add(new ArrayList<>());
return rst;
} Arrays.sort(nums);
List<Integer> list = new ArrayList<>();
int[] visited = new int[nums.length];
helper(rst,list,nums,visited);
return rst;
} private void helper(List<List<Integer>> rst, List<Integer> list, int[] nums,int[] visited){
if(list.size()==nums.length){
rst.add(new ArrayList<Integer>(list));
return;
} for(int i=0;i<nums.length;i++){
if(visited[i]==1){
continue;
}
if(i-1>=0 && nums[i]==nums[i-1] && visited[i-1]==0){
continue;
} list.add(nums[i]);
visited[i]=1; helper(rst,list,nums,visited); list.remove(list.size()-1);
visited[i]=0;
}
}
};

DFS 时间复杂度:答案个数*构造每个答案的时间

DP:状态个数*计算每个状态的时间

DFS-20190206的更多相关文章

  1. BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]

    3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 1280 MBSubmit: 3127  Solved: 795[Submit][Status][Discu ...

  2. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  3. BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1352  Solved: 780[Submit][Stat ...

  4. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  5. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  6. POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)

    来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS   Memory Limit: 65536 ...

  7. 深度优先搜索(DFS)

    [算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...

  8. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

  9. 【BZOJ-1146】网络管理Network DFS序 + 带修主席树

    1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3495  Solved: 1032[Submi ...

  10. 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组

    E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...

随机推荐

  1. CentOS7.4配置SSH登录密码与密钥身份验证踩坑

    简单记录,自用CentOS7.4虚拟机与ALiYunVPS,在配置ssh登录身份验证时碰到的问题. 阿里云VPS:因为在重置磁盘时选择了密钥对的身份验证方式,因此VPS中的CentOS7.4中的 /e ...

  2. 《Maven实战》

    原创作者: 许晓斌   阅读:61148次   评论:19条   更新时间:2011-06-23     你是否早已厌倦了日复一日的手工构建工作?你是否对各个项目风格迥异的构建系统感到恐惧?Maven ...

  3. 实践作业4:Web测试----细化分工DAY1.

    会议时间:2017年12月23日 会议地点:东九教学楼教师休息室 主持人:吴辉 参会人员:吴辉.刘思佳.郜昌磊.王俊杰.吴慧杰 记录人:刘思佳 会议议题:本次作业的分工以及初期安排 工具选择 软件测试 ...

  4. 在win10 + ie11上使用控件

    1.1. 在Win10+IE11上提示创建文件错误的问题 解决方法: 1.打开Internet选项   2.取消勾选启用保护模式   选择"不再显示此消息"

  5. 编写高质量代码改善C#程序的157个建议——建议104:用多态代替条件语句

    建议104:用多态代替条件语句 假设要开发一个自动驾驶系统.在设计之初,此自动驾驶系统拥有一个驾驶系统命令的枚举类型: enum DriveCommand { Start, Stop } 当前该枚举存 ...

  6. 自定义DropDownMenu菜单

    在JayFang1993 / DropDownMenu的基础上进行修改,最后的到自己想要的效果 本来的效果: 而我最后实现的效果是: 我们先来分析一下DropDownMenu的源代码 需要改动的地方 ...

  7. Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析

    Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析 一:Tolookup 1. 从方法的注解上可以看到,ToLookup也是一个k,v的形式,那么问题来了,它 ...

  8. Web.config配置文件详解(新手必看) (转载)

    原文地址:http://www.cnblogs.com/gaoweipeng/archive/2009/05/17/1458762.html <?xmlversion="1.0&quo ...

  9. Linq to SQL 中将数字转换为字符串

    使用LINQ to Entities中的SqlFunctions调用数据库中的函数 添加引用System.Data.Entity 引用命名空间 using System.Data.Objects.Sq ...

  10. 提高SQL Server数据库效率常用方法

    1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大 ...