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 ...
随机推荐
- JMS学习之理论基础
本文代码使用ActiveMq5.6 一.什么是JMS JMS(Java Message Service,Java消息服务)是一组Java应用程序接口(Java API),它提供创建.发送.接收.读取消 ...
- Linux useradd 与 adduser的区别, /sbin/nologin 与 /bin/bash
摘自:https://blog.csdn.net/danson_yang/article/details/65629948 Linux useradd 与 adduser的区别, /sbin/nolo ...
- 实践作业3:白盒测试----总结与反思DAY12.
---恢复内容开始--- 阶段一:熟悉白盒测试方法 负责人:刘思佳 工作质量评价:用例设计详细,考虑到白盒测试基于代码,所以尽可能地覆盖更多的白盒测试方法,对系统可能存在的缺陷就更容易了解.对管理员和 ...
- 基于保守性和规则性的预测方法SIFT和PolyPhen
有什么特征可以帮助我们来区分导致功能和表型变化的变异和其他变异,然后我们如何综合特征来做出一个预测模型? 表型或功能的改变(phenotypical/functional effect)a,个体表型上 ...
- SQL高性能分页
分页的场景就不多说了,无处不在. 方法一:利用row_number() with C as ( select ROW_NUMBER() over(order by orderdate,orderid) ...
- 如何查找文件中的schema约束
1.下载一个spring3.2的jar和source 然后打开source的文件(路径:\spring-framework-3.2.5.RELEASE\docs\spring-framework-re ...
- thinkphp+memcache缓存例子
public function dailyRelays() { $history = I('post.history'); $da = new \Home\Model\DailyrelayModel( ...
- JS 封装的结构关系
/* -- 封装 -- */var _packaging = function() { //私有属性和方法 var age = "12"; var method1 = functi ...
- ASP.NET Identity + Entity Framework 6 注意
最近一个项目使用ASP.NET Identity + Entity Framework 6开发,本来一切正常. 某时注意到,更改密码功能程序执行起来没有问题,界面上也报修改密码成功,但实际上密码并没有 ...
- vsftpd安装与配置--研究tcp与防火墙
vsftpd的配置文件 /etc/vsftpd/vsftpd.conf 主配置文件 /usr/sbin/vsftpd Vsftpd的主程序 /etc/rc.d/init.d/vsftpd 启动脚本 / ...