【刷力扣】练习JAVA 三()

【根据官方题解理解后解答

使用官方解答方法一】

【图】【链表】

目录

题目:​

解答:

  【深度优先搜索+三颜色标记】

答题所用代码:

完整代码:

出过的错误:


题目:

解答:

  【深度优先搜索+三颜色标记】

官方解答也比较详细

答题所用代码:

class Solution {
    public List<Integer> eventualSafeNodes(int[][] graph) {
        int n=graph.length;
        int []color=new int[n];//定义数组标记结点状态
        List <Integer> ans=new ArrayList<Integer>();
        for(int i=0;i<n;i++)
        {
            if(safe(graph,i,color))
               ans.add(i);
        }
        return ans;
    }
        public boolean safe(int [][]graph,int k,int []color)
        {
            if(color[k]>0)
              return color[k]==2;

            color[k]=1;//访问一个节点时,首先将它标记为1在环上
            for(int i:graph[k])
            {
                if(!safe(graph,i,color))//有在环上,不满足
                return false;
                
            }
            color[k]=2;//
            return true;
        }
        

    
}

完整代码:

【有主函数的程序】从上面扒下来的

class Solution {
    public List<Integer> eventualSafeNodes(int[][] graph) {
        int n=graph.length;
        int []color=new int[n];//定义数组标记结点状态
        List <Integer> ans=new ArrayList<Integer>();
        for(int i=0;i<n;i++)
        {
            if(safe(graph,i,color))
               ans.add(i);
        }
        return ans;
    }
        public boolean safe(int [][]graph,int k,int []color)
        {
            if(color[k]>0)
              return color[k]==2;

            color[k]=1;//访问一个节点时,首先将它标记为1在环上
            for(int i:graph[k])
            {
                if(!safe(graph,i,color))//有在环上,不满足
                return false;
                
            }
            color[k]=2;//
            return true;
        }
        

    
}

public class MainClass {
    public static int[] stringToIntegerArray(String input) {
        input = input.trim();
        input = input.substring(1, input.length() - 1);
        if (input.length() == 0) {
          return new int[0];
        }
    
        String[] parts = input.split(",");
        int[] output = new int[parts.length];
        for(int index = 0; index < parts.length; index++) {
            String part = parts[index].trim();
            output[index] = Integer.parseInt(part);
        }
        return output;
    }
    
    public static int[][] stringToInt2dArray(String input) {
        JsonArray jsonArray = JsonArray.readFrom(input);
        if (jsonArray.size() == 0) {
          return new int[0][0];
        }
    
        int[][] arr = new int[jsonArray.size()][];
        for (int i = 0; i < arr.length; i++) {
          JsonArray cols = jsonArray.get(i).asArray();
          arr[i] = stringToIntegerArray(cols.toString());
        }
        return arr;
    }
    
    public static String integerArrayListToString(List<Integer> nums, int length) {
        if (length == 0) {
            return "[]";
        }
    
        String result = "";
        for(int index = 0; index < length; index++) {
            Integer number = nums.get(index);
            result += Integer.toString(number) + ", ";
        }
        return "[" + result.substring(0, result.length() - 2) + "]";
    }
    
    public static String integerArrayListToString(List<Integer> nums) {
        return integerArrayListToString(nums, nums.size());
    }
    
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while ((line = in.readLine()) != null) {
            int[][] graph = stringToInt2dArray(line);
            
            List<Integer> ret = new Solution().eventualSafeNodes(graph);
            
            String out = integerArrayListToString(ret);
            
            System.out.print(out);
        }
    }
}

出过的错误:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值