直接使用建图DFS即可解决。当然在实现图的时候又一些代码细节,这里直接看代码
class Solution {
public:
vector<int> restoreArray(vector<vector<int>>& adjacentPairs) {
unordered_map<int, vector<int>> graph;
unordered_set<int> isVisited;
for (auto adjacentPair : adjacentPairs) {
graph[adjacentPair[0]].push_back(adjacentPair[1]);
graph[adjacentPair[1]].push_back(adjacentPair[0]);
isVisited.insert(adjacentPair[0]);
isVisited.insert(adjacentPair[1]);
}
vector<int> res;
int start = -1;
for(auto & [v, edges] : graph) {
if (edges.size() == 1) {
start = v;
break;
}
}
function<void(int)> dfs = [&](int idx){
res.push_back(idx);
isVisited.erase(idx);
for (auto v : graph[idx]) {
if (isVisited.count(v)) {
dfs(v);
}
}
};
dfs(start);
return res;
}
};