题解 | #小米Git#
小米Git
https://www.nowcoder.com/practice/4fcd94851d9142458329fd1d3e5802a8
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix string字符串一维数组 * @param versionA int整型 * @param versionB int整型 * @return int整型 */ public int Git (String[] matrix, int versionA, int versionB) { int n = matrix.length; List[] g = new List[n]; for(int i = 0; i < n; i ++){ g[i] = new ArrayList<Integer>(); } // 建图 for(int i = 0; i < n; i ++){ for(int j = 0; j < n; j ++){ if(matrix[i].charAt(j) == '1'){ g[i].add(j); } } } // 寻找路径 List<Integer> pathA = new ArrayList<>(); List<Integer> pathB = new ArrayList<>(); int[] vis = new int[n]; dfs(0, g, versionA, pathA, vis); Arrays.fill(vis, 0); dfs(0, g, versionB, pathB, vis); // 判断公共路径 int i = 0, j = 0, res = -1; while(i < pathA.size() && j < pathB.size()){ if(pathA.get(i) == pathB.get(j)){ res = pathA.get(i); }else{ break; } i ++; j ++; } return res; } // 找两个点之间的路径 private boolean dfs(int cur,List<Integer>[] g, int target, List<Integer> path, int[] vis){ vis[cur] = 1; path.add(cur); if(cur == target)return true; for(int next : g[cur]){ if(vis[next] == 0 && dfs(next, g, target, path, vis)){ return true; } } path.remove(path.size() - 1); return false; } }