Hueso de rebanada

1. Cuando la capacidad del segmento no sea suficiente, agregar se convertirá en un segmento recién generado.

Vea el "pozo" del relleno en el apéndice de la rebanada de golang - Zhihu (zhihu.com)

2. El resultado permanece sin cambios al agregar

En la pregunta 46 de leetcode, mi código es el siguiente

func permute(nums []int) [][]int {
    if len(nums) == 0{
        return [][]int{}
    }
    result := [][]int{}
    track := []int{}
    used := make([]bool, len(nums))
    backtrack(nums, &track, &used, &result)
    return result
}

func backtrack(nums []int, track *[]int, used *[]bool, result *[][]int){
    // 触发结束条件
    if len(*track) == len(nums){
        temp := make([]int, len(*track))
		copy(temp, *track) // 一定要copy到temp中再append,不能直接把*track append到*result中
        *result = append(*result, temp)
        return
    }

    for idx, num := range nums{
        // 排除不合法的选择
        if (*used)[idx]{
            continue // nums[idx]已经做过选择
        }
        // 做选择
        *track = append(*track, num)
        (*used)[idx] = true
        // 进入下一层决策树
        backtrack(nums, track, used, result)
        // 撤销选择
        *track = (*track)[:len(*track)-1]
        (*used)[idx] = false
    }
    return
}

 en este codigo

 Mi intención original es agregar *pista al *resultado, pero el resultado de agregarlo directamente es incorrecto y el resultado permanece sin cambios. Sin embargo, si lo copio y luego lo agrego al *resultado, será correcto, por lo que obviamente no es el Capacidad de la primera rebanada. En este momento, aún no he encontrado el motivo, ya es tarde en la noche, llenaré los agujeros más tarde cuando encuentre el motivo.

 

Supongo que te gusta

Origin blog.csdn.net/qq_55621259/article/details/128309784
Recomendado
Clasificación