题解 | #牛牛吃水果的顺序#

牛牛吃水果的顺序

https://www.nowcoder.com/practice/336b43ff1d664cdd8e3e39acb67dfa39

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param numFruits int整型
 * @param prerequisites int整型二维数组
 * @return int整型二维数组
 */
type tuoPu struct {
	in_count int
	val      int
	out      *out
}

type out struct {
	val  int
	next *out
}

var result [][]int

func findFruitOrder(numFruits int, prerequisites [][]int) [][]int {
	// write code here
	result = make([][]int, 0, 100)
	arr := make([]tuoPu, numFruits)
	for i := 0; i < numFruits; i++ {
		arr[i] = tuoPu{val: i}
	}
	for i := 0; i < len(prerequisites); i++ {
		v1 := prerequisites[i][0] //在后
		v2 := prerequisites[i][1] //在前
		arr[v1].in_count++
		if arr[v2].out == nil {
			arr[v2].out = &out{val: v1}
		} else {
			v := arr[v2].out
			for v.next != nil {
				v = v.next
			}
			v.next = &out{val: v1}
		}
	}
	temp := make([]int, numFruits)
	recursion(arr, temp, 0)
	return result
}

func recursion(arr []tuoPu, temp []int, index int) {
	if index >= len(temp) {
		return
	}
	for i := 0; i < len(arr); i++ {
		if arr[i].in_count == 0 {
			temp[index] = arr[i].val
			arr[i].in_count-- //变成-1
			o := arr[i].out   //遍历出度
			for o != nil {
				arr[o.val].in_count-- //出度减一
				o = o.next
			}
			recursion(arr, temp, index+1)
			arr[i].in_count++
			o = arr[i].out
			for o != nil {
				arr[o.val].in_count++ //出度加一
				o = o.next
			}
		}
	}
	if index == len(temp)-1 {
		//v := temp
		v := make([]int, len(temp))
		for i := 0; i < len(temp); i++ {
			v[i] = temp[i]
		}
		result = append(result, v)
	}
}

全部评论

相关推荐

白火同学:大二有这水平很牛了,可以适当对关键信息加粗一点,比如关键技术、性能指标之类的。
点赞 评论 收藏
分享
asdasdasdasdas:19岁,不容易啊可能升个本会好点,现在学历歧视太严重了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务