class Solution {
public static int[] findOrder(int num, int[][] pre) {
Node[] arr = new Node[num];
for (int i = 0; i < arr.length; i++) {
arr[i] = new Node();
arr[i].val = i;
}
for (int i = 0; i < pre.length; i++) {
arr[pre[i][0]].pre.add(pre[i][1]);
}
String[] str = print(arr).split(" ");
if(str.length!=num)return new int[]{};
int [] ans = new int[str.length];
for(int i = 0 ; i< str.length ; i++) {
ans[i] = Integer.parseInt(str[i]);
}
return ans;
}
public static String print(Node[] arr) {
int len = arr.length;
// 次数
int count = 1;
StringBuffer sb = new StringBuffer("");
while (count++ <= len) {
for (int i = 0; i < len; i++) {
if (arr[i] != null) {
Node temp = arr[i];
int val = temp.val;
// 如果入度为0,则输出
if (temp.pre.size() == 0) {
// 输出结果
sb.append(i + " ");
arr[i] = null;
// 从头遍历一遍
for (int j = 0; j < len; j++) {
if (arr[j] != null) {
// 小心remove索引而不是自己要的值
arr[j].pre.remove(val);
}
}
}
}
}
}
return sb.toString();
}
}
class Node{
//没有考虑重复为问题
int val ;
HashSet<Integer>pre = new HashSet<Integer>();
}
京公网安备 11010502036488号