首页 > 其他分享 >Leetcode133.克隆图

Leetcode133.克隆图

时间:2023-11-10 11:36:21浏览次数:39  
标签:node Node return 克隆 neighbors targetNode Leetcode133 val

   需要注意图中存在环路。

  JAVA:

    public final Node cloneGraph(Node node) {
        return deepCopy(node, new HashMap<Integer, Node>());
    }

    private Node deepCopy(Node node, HashMap<Integer, Node> hisMap) {
        if (null == node) return node;
        if (hisMap.keySet().contains(node.val)) return hisMap.get(node.val);
        Node targetNode = new Node(node.val);
        hisMap.put(node.val, targetNode);
        targetNode.neighbors = new ArrayList<Node>(node.neighbors.size());
        for (int i = 0; i < node.neighbors.size(); i++) {
            targetNode.neighbors.add(deepCopy(node.neighbors.get(i), hisMap));
        }
        return targetNode;
    }

  JS:

var cloneGraph = function (node) {
    return deepCopy(node, {});
};

var deepCopy = function (node, hisMap) {
    if (!node) return node;
    if (hisMap[node.val]) return hisMap[node.val];
    let targetNode = new Node(node.val, []);
    hisMap[node.val] = targetNode;
    for (let i = 0; i < node.neighbors.length; i++) {
        targetNode.neighbors.push(deepCopy(node.neighbors[i], hisMap));
    }
    return targetNode;
}

  C:

struct Node *deepCopy(struct Node *graph, struct Node **graphArray)
{
    if (NULL == graph || NULL == graph->val)
        return graph;
    if (NULL != graphArray[graph->val])
        return graphArray[graph->val];
    struct Node *targetNode = (struct Node *)malloc(sizeof(struct Node));
    targetNode->val = graph->val;
    targetNode->numNeighbors = graph->numNeighbors;
    targetNode->neighbors = malloc(sizeof(struct Node *) * graph->numNeighbors);
    memset(targetNode->neighbors, 0, sizeof(struct Node *) * graph->numNeighbors);
    graphArray[graph->val] = targetNode;
    for (int i = 0; i < graph->numNeighbors; i++)
    {
        targetNode->neighbors[i] = deepCopy(graph->neighbors[i], graphArray);
    }
    return targetNode;
}

struct Node *cloneGraph(struct Node *s)
{
    struct Node **graphArray = (struct Node **)malloc(sizeof(struct Node *) * 101);
    memset(graphArray, 0, sizeof(struct Node *) * 101);
    struct Node *targetRoot = deepCopy(s, graphArray);
    free(graphArray);
    return targetRoot;
}

  Python:

class Solution:
    def cloneGraph(self, node: Optional['Node']) -> Optional['Node']:
        return self.deepCopy(node, {})

    def deepCopy(self, node: Optional['Node'], visited) -> Optional['Node']:
        if not node:
            return node
        if node in visited:
            return visited[node]
        neighbors = node.neighbors;
        copyNode = Node(node.val, [])
        visited[node] = copyNode
        for neighbor in neighbors:
            cpoyNeighbor = self.deepCopy(neighbor, visited)
            copyNode.neighbors.append(cpoyNeighbor)
        return copyNode

 

标签:node,Node,return,克隆,neighbors,targetNode,Leetcode133,val
From: https://www.cnblogs.com/niuyourou/p/17823694.html

相关文章

  • 用dd命令克隆ubuntu系统
    神奇的ghost的原理是什么呢?不就是数据复制吗?Linux下的dd命令不就是最强大的数据复制工具!        既然如此,我为什么要使用g4l这样复杂的工具呢?一条dd命令不就可以帮我实现任意复杂的镜像复制和恢复的需求了吗?管他是grub,还是ext4,btrfs,FAT32,NTFS...dd面前众生平等。  ......
  • Ubuntu 修改主机名和hosts文件并克隆虚拟机初步搭建集群
    进入终端输入 sudovim/etc/hosts像红框里一样,添加自己虚拟机的主机名称映射然后终端输入reboot重启虚拟机然后操作参考Ubuntu20虚拟机克隆以及克隆后静态IP和主机名的修改_ubuntu克隆后修改ip-CSDN博客 ......
  • c# list集合克隆
    在C#中,List集合是一种泛型集合,可以存储任何类型的对象。克隆一个List集合可以通过以下几种方式实现:使用List的构造函数使用List的构造函数可以创建一个新的List对象,并将原始List中的元素复制到新List中。例如:List<int>list1=newList<int>{1,2,3};......
  • 克隆自己的ubuntu系统并在其它开发板还原
    背景最近接手了一个项目需要在友善之臂的NanoPi-M1-PLUS的开发板上运行一个小型的web程序。开发版跑的系统是ubuntu16.04的一个定制版本内核4.14.111。ubuntu系统上需要安装配置,nginx,tomcat,mysql,串口驱动,等等一系列的环境。一个开发版的环境配置下来至少3-4小时,然而我这里有24个......
  • JavaScript 中的深度克隆
    JavaScript中的深度克隆涉及创建一个新对象,该对象是现有对象的副本,并将复制延续到所有嵌套属性,以确保两个对象完全独立。这项技术对于保持程序中的不变性等任务至关重要,对于处理React等框架中的状态尤其重要。它有助于防止意外的对象突变可能引起的错误,从而产生更易于维护且无......
  • Git 克隆错误 error: RPC failed; curl 28 Recv failure: Connection was reset
    在网络情况不稳定下克隆项目时,可能会出现下图中的错误。问题原因:http缓存不够或者网络不稳定等。我也是找了好多博客资料,终于解决了解决方法打开cmd,修改git配置(加大httpBuffer)即可。gitconfig--globalhttp.postBuffer524288000  我在解决这个问题之前clone一......
  • 栩栩如生,音色克隆,Bert-vits2文字转语音打造鬼畜视频实践(Python3.10)
    诸公可知目前最牛逼的TTS免费开源项目是哪一个?没错,是Bert-vits2,没有之一。它是在本来已经极其强大的Vits项目中融入了Bert大模型,基本上解决了VITS的语气韵律问题,在效果非常出色的情况下训练的成本开销普通人也完全可以接受。BERT的核心思想是通过在大规模文本语料上进行无监督预......
  • 小白学 Python:在 Python 中创建 ChatGPT 克隆
    在Python中创建ChatGPT克隆我们将学习如何使用Python中的Flet开发具有多个节点的聊天应用程序以及使用OpenAI的text-davinci-003[ChatGPTAPI]模型引擎制作的应答机器人。Flet是什么?无需直接使用Flutter,程序员就可以使用FletPython库创建实时Web、移动和桌面应用......
  • 如何克隆特定的Git分支?
    内容来自DOChttps://q.houxu6.top/?s=如何克隆特定的Git分支?Git克隆将会将远程分支克隆到本地。有没有一种方法可以自己克隆特定的分支,而不必在远程仓库上切换分支?gitclone--single-branch--branch<分支名><远程仓库地址>--single-branch选项从版本1.7.10及以后的......
  • Base虚拟机克隆集群节点,并固定IP与免密互通
    克隆Base虚拟机先把Base关机,然后右键-管理-克隆选择完整克隆克隆名字这里叫node1重复步骤,克隆node2/node3为了分类,创建了一个大数据集群文件夹以下命令全是root权限执行配置固定IP#修改主机名hostnamectlset-hostnamenode1#修改IPvim/etc/sysconfig/ne......