leetcode797

a-p节点的所有路径(leetcode797 golang解法)

func allPathsSourceTarget(graph [][]int) [][]int {
      // 前溯法,没有有思路就别写
      len2:=len(graph);
      path :=make([]int,0);
      // 二维数组
      res  :=make([][]int,0);
      // 充分体现其面向过程的特点,实体不是很多
      // append函数,在length加一上写
      path=append(path,0);
      backtracking(path,graph,&res,len2-1)
      return res;
}
// 操作这个分片,当成栈和队列使用
// go语言, 禁止写的像java语言
func backtracking(path []int,graph [][]int,res *[][]int,dst int){
    start := path[len(path)-1]
    if start == dst {
        //copy方法不会改变其长度
        path2:=make([]int,len(path))
        // path一直在变,所以需要拷贝
        copy(path2,path)
        fmt.Println(path2)
        // 二维切片的操作
        // 给变量赋值,在函数中是不能改变实参的
        // 就像在java中无法修改String,因为每次修改,都是返回新的引用,但是可以使用StringBuffer
        *res=append(*res,path2)
        return
    }
    for _,val :=range graph[start]{
        path=append(path,val)

        // fmt.Println(val)
        backtracking(path,graph,res,dst)
        // 相对于弹出
        path = path[:len(path)-1]  
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值