zoukankan      html  css  js  c++  java
  • 0133. Clone Graph (M)

    Clone Graph (M)

    题目

    Given a reference of a node in a connected undirected graph.

    Return a deep copy (clone) of the graph.

    Each node in the graph contains a val (int) and a list (List[Node]) of its neighbors.

    class Node {
        public int val;
        public List<Node> neighbors;
    }
    

    Test case format:

    For simplicity sake, each node's value is the same as the node's index (1-indexed). For example, the first node with val = 1, the second node with val = 2, and so on. The graph is represented in the test case using an adjacency list.

    Adjacency list is a collection of unordered lists used to represent a finite graph. Each list describes the set of neighbors of a node in the graph.

    The given node will always be the first node with val = 1. You must return the copy of the given node as a reference to the cloned graph.

    Example 1:

    Input: adjList = [[2,4],[1,3],[2,4],[1,3]]
    Output: [[2,4],[1,3],[2,4],[1,3]]
    Explanation: There are 4 nodes in the graph.
    1st node (val = 1)'s neighbors are 2nd node (val = 2) and 4th node (val = 4).
    2nd node (val = 2)'s neighbors are 1st node (val = 1) and 3rd node (val = 3).
    3rd node (val = 3)'s neighbors are 2nd node (val = 2) and 4th node (val = 4).
    4th node (val = 4)'s neighbors are 1st node (val = 1) and 3rd node (val = 3).
    

    Example 2:

    Input: adjList = [[]]
    Output: [[]]
    Explanation: Note that the input contains one empty list. The graph consists of only one node with val = 1 and it does not have any neighbors.
    

    Example 3:

    Input: adjList = []
    Output: []
    Explanation: This an empty graph, it does not have any nodes.
    

    Example 4:

    Input: adjList = [[2],[1]]
    Output: [[2],[1]] 
    

    Constraints:

    • 1 <= Node.val <= 100
    • Node.val is unique for each node.
    • Number of Nodes will not exceed 100.
    • There is no repeated edges and no self-loops in the graph.
    • The Graph is connected and all nodes can be visited starting from the given node.

    题意

    复制一个图。

    思路

    深拷贝一个图,递归处理即可。一个结点的标识符是它的val值,每次复制一个结点,将它存入map中,当下一次再遇到这个结点时,直接返回已经map中存储的已经复制的。


    代码实现

    Java

    class Solution {
        private Map<Integer, Node> cloned = new HashMap<>();
    
        public Node cloneGraph(Node node) {
            if (node == null) {
                return null;
            }
          
            if (cloned.containsKey(node.val)) {
                return cloned.get(node.val);
            }
          
            Node clone = new Node(node.val);
            cloned.put(node.val, clone);	   // 注意一定要先保存到map再进行递归
            for (Node tmp : node.neighbors) {
                clone.neighbors.add(cloneGraph(tmp));
            }
            return clone;
        }
    }
    
  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    103. Binary Tree Zigzag Level Order Traversal
    102. Binary Tree Level Order Traversal
    690. Employee Importance
    1723. Find Minimum Time to Finish All Jobs
    LeetCode 329 矩阵中最长增长路径
    7.2 物理内存管理
    LeetCode 面试题 特定深度节点链表
    LeetCode 100 相同的树
    npm安装包命令详解,dependencies与devDependencies实际区别
  • 原文地址:https://www.cnblogs.com/mapoos/p/13848500.html
Copyright © 2011-2022 走看看