答案:
class Solution {
public List<Integer> eventualSafeNodes(int[][] graph) {
List<Integer> ans = new ArrayList<>();
Set<Integer> safeSet = new HashSet<>();
for(int i=0;i<graph.length;i++){
if(isEnd(i,graph)==true){
safeSet.add(i);
}
}
safeSet = isSafe(safeSet,0,graph);
for(int i=0;i<graph.length;i++){
if(safeSet.contains(i)){
ans.add(i);
}
}
return ans;
}
public boolean isEnd(int node,int[][] graph){
if(graph[node].length==0){
return true;
}else{
return false;
}
}
public Set<Integer> isSafe(Set<Integer> safeSet,int layer,int[][] graph){
Set<Integer> safeSet2 = new HashSet();
for (Integer element : safeSet) {
safeSet2.add(element);
}
for(int i=0;i<graph.length;i++){
if(!safeSet.contains(i)){
int num;
for(num=0;num<graph[i].length;num++){
if(!safeSet.contains(graph[i][num])){
break;
}
}
if(num==graph[i].length){
safeSet.add(i);
}
}
}
if(safeSet.equals(safeSet2)){
return safeSet;
}else{
isSafe(safeSet,layer+1,graph);
}
return safeSet;
}
}