zoukankan      html  css  js  c++  java
  • Leetcode 133. Clone Graph

    Description: 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.

     Link: 133. Clone Graph

    Examples:

    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]]

    思路: deep copy,就是要所有node重新创建,关系重新连接好。

    class Solution(object):
        def cloneGraph(self, node):
            """
            :type node: Node
            :rtype: Node
            """
            return self.dfs(node, dict())
           
        
        def dfs(self, node, nodes):
            if not node: return None
            if node.val in nodes: return nodes[node.val]
            new = Node(node.val, [])
            nodes[node.val] = new
            for n in node.neighbors:
                new_n = self.dfs(n, nodes)
                if new_n:
                    new.neighbors.append(new_n)
            return new

    日期: 2021-03-26

  • 相关阅读:
    ryu 下发流表配置
    openstack kolla 部署---不同的节点采用不同的物理接口
    kolla 安装
    Ubuntu add-apt-repository: command not found
    大前端发展趋势
    这些优化技巧可以避免我们在 JS 中过多的使用 IF 语句
    asap异步执行实现原理
    为什么 JS 对象内部属性遍历的顺序乱了
    你可能忽略的 async/await 问题
    深入浅出JS原型链
  • 原文地址:https://www.cnblogs.com/wangyuxia/p/14582301.html
Copyright © 2011-2022 走看看