题目描述如下:
代码思路:通过一个Map集合将元素的前后元素都找出来,然后通过出现次数先找出第一个元素(第一个元素和最后一个元素只出现了一次),然后依次寻找后面的元素。
代码如下:
class Solution {
public int[] restoreArray(int[][] adjacentPairs) {
Map<Integer, List<Integer>> map = new HashMap<>();
for(int[] adjacentPair : adjacentPairs){
map.putIfAbsent(adjacentPair[0], new ArrayList<Integer>());
map.putIfAbsent(adjacentPair[1], new ArrayList<Integer>());
map.get(adjacentPair[0]).add(adjacentPair[1])
map.get(adjacentPair[1]).add(adjacentPair[0])
}
int n = adjacentPairs.length + 1;
int[] res = new int[n];
// map遍历
for(Map.Entry<Integer, List<Integer>> entry : map.entrySet()){
int e = entry.getKey();
List<Integer> adj = entry.getValue();
//找出第一个元素
if(adj.size() == 1){
res[0] = e;
break;
}
}
//get(0)是因为取出来的是List<Integer>,所以要取第一个元素用get(0)
res[1] = map.get(res[0]).get(0);
//依次寻找后面的元素
for(int i=2;i<n;i++){
List<Integer> adj = map.get(res[i-1]);
res[i] = res[i-2] == adj.get(0) ? adj.get(1) : adj.get(0);
}
return res;
}
}