题解 | #牛牛吃水果的顺序#
牛牛吃水果的顺序
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)
}
}
查看11道真题和解析