panghu week01 总结笔记

发布时间 2023-12-23 17:12:14作者: Paualf

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 怎么写单元测试,这些疑问在后面慢慢完善