DFS-20190206
找出所有方案
排列和组合问题
排列:
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的更多相关文章
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1352 Solved: 780[Submit][Stat ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)
来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536 ...
- 深度优先搜索(DFS)
[算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-1146】网络管理Network DFS序 + 带修主席树
1146: [CTSC2008]网络管理Network Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 3495 Solved: 1032[Submi ...
- 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组
E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...
随机推荐
- CentOS7.4配置SSH登录密码与密钥身份验证踩坑
简单记录,自用CentOS7.4虚拟机与ALiYunVPS,在配置ssh登录身份验证时碰到的问题. 阿里云VPS:因为在重置磁盘时选择了密钥对的身份验证方式,因此VPS中的CentOS7.4中的 /e ...
- 《Maven实战》
原创作者: 许晓斌 阅读:61148次 评论:19条 更新时间:2011-06-23 你是否早已厌倦了日复一日的手工构建工作?你是否对各个项目风格迥异的构建系统感到恐惧?Maven ...
- 实践作业4:Web测试----细化分工DAY1.
会议时间:2017年12月23日 会议地点:东九教学楼教师休息室 主持人:吴辉 参会人员:吴辉.刘思佳.郜昌磊.王俊杰.吴慧杰 记录人:刘思佳 会议议题:本次作业的分工以及初期安排 工具选择 软件测试 ...
- 在win10 + ie11上使用控件
1.1. 在Win10+IE11上提示创建文件错误的问题 解决方法: 1.打开Internet选项 2.取消勾选启用保护模式 选择"不再显示此消息"
- 编写高质量代码改善C#程序的157个建议——建议104:用多态代替条件语句
建议104:用多态代替条件语句 假设要开发一个自动驾驶系统.在设计之初,此自动驾驶系统拥有一个驾驶系统命令的枚举类型: enum DriveCommand { Start, Stop } 当前该枚举存 ...
- 自定义DropDownMenu菜单
在JayFang1993 / DropDownMenu的基础上进行修改,最后的到自己想要的效果 本来的效果: 而我最后实现的效果是: 我们先来分析一下DropDownMenu的源代码 需要改动的地方 ...
- Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析
Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析 一:Tolookup 1. 从方法的注解上可以看到,ToLookup也是一个k,v的形式,那么问题来了,它 ...
- Web.config配置文件详解(新手必看) (转载)
原文地址:http://www.cnblogs.com/gaoweipeng/archive/2009/05/17/1458762.html <?xmlversion="1.0&quo ...
- Linq to SQL 中将数字转换为字符串
使用LINQ to Entities中的SqlFunctions调用数据库中的函数 添加引用System.Data.Entity 引用命名空间 using System.Data.Objects.Sq ...
- 提高SQL Server数据库效率常用方法
1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大 ...