Leetcode 133. 克隆图 解题思路及C++实现
生活随笔
收集整理的這篇文章主要介紹了
Leetcode 133. 克隆图 解题思路及C++实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
解題思路:
這道題目,一開始看了幾遍都沒看懂題意,后來找網上的答案才明白是要干啥。其實就是做一次深拷貝的實現。也是比較典型的深度優先搜索問題。
使用C++中的unordered_map<Node*, Node*> 來克隆節點,在訪問Node時,先判斷是否已經對該節點做過克隆,如果有,則直接返回該克隆節點即可,如果沒有,則執行程序,克隆該節點:包括val值和neighbors,在克隆其neighbors時,可能會遇到未克隆的節點,所以需要遞歸調用克隆函數。
?
/* // Definition for a Node. class Node { public:int val;vector<Node*> neighbors;Node() {}Node(int _val, vector<Node*> _neighbors) {val = _val;neighbors = _neighbors;} }; */ class Solution { public:Node* cloneGraph(Node* node) {unordered_map<Node*, Node*> mp;return dfs(node, mp);}Node* dfs(Node* node, unordered_map<Node*, Node*>& mp){if(!node) return NULL;if(mp.count(node)) return mp[node];Node* tmp = new Node(node->val);mp[node] = tmp;for(Node* neighbor: node->neighbors){tmp->neighbors.push_back(dfs(neighbor, mp));}return tmp;} };?
?
總結
以上是生活随笔為你收集整理的Leetcode 133. 克隆图 解题思路及C++实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode 130. 被围绕的区域
- 下一篇: Leetcode 200. 岛屿数量 解