美文网首页
LeetCode 第133题:克隆图

LeetCode 第133题:克隆图

作者: 放开那个BUG | 来源:发表于2020-08-19 17:39 被阅读0次

1、前言

题目描述

2、思路

这个题目的思路就是遍历整张图,然后克隆一摸一样的图。遍历一般使用 BFS 或者 DFS。为了记录是否已经遍历了图的某个顶点,需要记录已经遍历的顶点。这里用 map 记录原始 node 与克隆 node 的关系。

3、代码

BFS:

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> neighbors;
    
    public Node() {
        val = 0;
        neighbors = new ArrayList<Node>();
    }
    
    public Node(int _val) {
        val = _val;
        neighbors = new ArrayList<Node>();
    }
    
    public Node(int _val, ArrayList<Node> _neighbors) {
        val = _val;
        neighbors = _neighbors;
    }
}
*/

class Solution {
    public Node cloneGraph(Node node) {
        if(node == null){
            return null;
        }

        // 存储原生 node 与克隆 node 的关系
        HashMap<Node, Node> map = new HashMap<>();
        Queue<Node> queue = new LinkedList<>();
        
        Node clone = new Node(node.val, new ArrayList<>());
        map.put(node, clone);
        queue.offer(node);

        while(!queue.isEmpty()){
            Node cur = queue.poll();
            for(Node n : cur.neighbors){
                if(!map.containsKey(n)){
                    Node newNode = new Node(n.val, new ArrayList<>());
                    map.put(n, newNode);
                    queue.offer(n);
                }
                map.get(cur).neighbors.add(map.get(n));
            }
        }

        return clone;
    }
}

DFS:

public Node cloneGraph(Node node) {
        HashMap<Node, Node> map = new HashMap<>();
        return dfs(node, map);
    }

    private Node dfs(Node node, HashMap<Node, Node> map){
        if(node == null){
            return null;
        }

        if(map.containsKey(node)){
            return map.get(node);
        }
        Node clone = new Node(node.val, new ArrayList<>());
        map.put(node, clone);
        for(Node n : node.neighbors){
            clone.neighbors.add(dfs(n, map));
        }

        return clone;
    }

相关文章

  • LeetCode 第133题:克隆图

    1、前言 2、思路 这个题目的思路就是遍历整张图,然后克隆一摸一样的图。遍历一般使用 BFS 或者 DFS。为了记...

  • LeetCode 133. 克隆图 | Python

    133. 克隆图 题目来源:力扣(LeetCode)https://leetcode-cn.com/problem...

  • Leetcode图

    133. 克隆图[https://leetcode-cn.com/problems/clone-graph/] 2...

  • Leetcode133. 克隆图

    题目 给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆)。图中的每个节点都包含它的值 val(Int) 和其...

  • LeetCode-133-克隆图

    克隆图 题目描述:给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 ...

  • 力扣(LeetCode)-133 克隆图

    本地考察的是图搜索 题目描述 克隆一张无向图,图中的每个节点包含一个 label (标签)和一个 neighbor...

  • Leetcode133克隆图

    题目 给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆)。图中的每个节点都包含它的值 val(Int) 和其...

  • LeetCode 力扣 133. 克隆图

    题目描述(中等难度) 复制一个图,图的节点定义如下。 neighbors 是一个装 Node 的 list ,因为...

  • LeetCode-python 133. 克隆图

    题目链接[https://leetcode.cn/problems/clone-graph] 难度:中等 ...

  • python实现leetcode之133. 克隆图

    解题思路 使用缓存记住已经计算过的,避免同一个对象拷贝多次然后递归处理邻接节点最后返回入口节点 133. 克隆图[...

网友评论

      本文标题:LeetCode 第133题:克隆图

      本文链接:https://www.haomeiwen.com/subject/jjwddktx.html