class Solution {
public:
int Git(vector<string>& matrix, int versionA, int versionB) {
// write code here
dfs(matrix, 0, versionA, versionB);
return found;
}
int found = -1;
int dfs(vector<string>& matrix, int node, int nodeA, int nodeB){
if(found != -1) return 0;
if(matrix[node][node] == -1) return 0; // visit
int res = 0;
if(node == nodeA) res |= 1;
if(node == nodeB) res |= 2;
matrix[node][node] = -1;
for(int i = 0; i < matrix[node].size(); i++){
if(matrix[node][i] == '1') res |= dfs(matrix, i, nodeA, nodeB);
}
if(found != -1){
return res;
}else{
if(res == 3) found = node;
return res;
}
}
};
经典最近公共祖先问题的
时间复杂度:O(n^2),n为点的数量
空间复杂度:O(n)最大递归深度,n为点的数量

京公网安备 11010502036488号