Algthrom:
组合总和:
func combinationSum(candidates []int, target int) [][]int {
res := make([][]int,0)
path := make([]int,0)
dfs(candidates,target,0,path,&res)
return res
}
func dfs(candidates []int,target int,pathSum int,path []int, res *[][]int) {
// terminator
if pathSum > target{
return
}
if pathSum == target {
temp := make([]int,len(path))
copy(temp,path)
*res = append(*res,temp)
return
}
for i := 0;i < len(candidates);i++ {
// current
pathSum += candidates[i]
path = append(path, candidates[i])
dfs(candidates,target,pathSum,path,res)
pathSum -= candidates[i]
path = path[:len(path)-1]
}
}
有重复元素,需要对元素进行去重 自己想当然的以为需要进行对数组进行排序然后 再 for 循环里面加上 if i > 0 && nums[i] == nums[i-1] continue 的判断,结果还是错了
真正错的地方是需要 dfs(i, candidates,target,pathSum,path,res) 这里 dfs(i) 的,其实这里真正脑子里面需要有一颗回溯树,然后需看这个树是怎么遍历和执行的,细节还是挺魔鬼的
func combinationSum(candidates []int, target int) [][]int {
res := make([][]int,0)
path := make([]int,0)
dfs(0, candidates,target,0,path,&res)
return res
}
func dfs(start int, candidates []int,target int,pathSum int,path []int, res *[][]int) {
// terminator
if pathSum > target{
return
}
if pathSum == target {
temp := make([]int,len(path))
copy(temp,path)
*res = append(*res,temp)
return
}
for i := start;i < len(candidates);i++ {
// current
pathSum += candidates[i]
path = append(path, candidates[i])
dfs(i, candidates,target,pathSum,path,res)
pathSum -= candidates[i]
path = path[:len(path)-1]
}
}
TIps:
最近在看 极客时间的 Spring 常见编程错误50例
为什么要看Spring呢,前段时间是去支援java项目组,目前在做 java 开发的项目了,所以想系统了解一下spring 相关的知识,因为你看框架,感觉有点云里雾里的,所以就想找门课动手去操作一下,然后去实践,所以开始看起来了
Spring 核心概念:
Bean 的创建、自动注入、AOP
Spring MAP 工厂:
public class BeanFactory {
private Map beanMap = new HashMap<>();
public Bean getBean(String key){
return beanMap.get(key) ;
}
}
找到Bean 以后装配给其他对象,这就是依赖查找、自动注入的过程了
有的需要实例化Bean,有的不需要,怎么区分的呢?
通过 扫描器 AnnotationScan 去扫描哪些需要实例化Bean
怎么创建Bean:
通过反射进行创建:
AOP:
扫描注解,根据注解生成规则
为什么要开始写 panghu 笔记呢:
因为还是觉得学习和日常总结应该放到平时,不断的积累,所以想写一下这个panghu 笔记
还有一些需要学习和需要了解的知识
Java reactor 是什么?
Java spring 怎么写单元测试,这些疑问在后面慢慢完善