思路:
1、迭代创建节点字典,记录下所在父级节点、距离根节点的步数
2、比较输入的节点,分类操作:
相同,则直接返回;
互为父子,则直接返回父;
若无关联,选择距离远的节点,向上走一步,继续比较。
class Solution:
def Git(self , matrix: List[str], versionA: int, versionB: int) -> int:
# 第一步:创建字典,记录父级及到根节点的距离
dictMat = {}
i = 0
while i < len(matrix):
beforeLen = len(dictMat.keys())
if i == 0 and not dictMat.__contains__(i):
dictMat[i] = {
'parent': 0,
'times': 0
}
for j in range(0, len(matrix[i])):
if matrix[i][j] == '1' and not dictMat.__contains__(j) and dictMat.__contains__(i):
dictMat[j] = {
'parent': i,
'times': dictMat[i]['times'] + 1
}
# 有修改则重复
if beforeLen != len(dictMat.keys()):
i = 0
else:
i += 1
# 第二步:分类循环比较
while True:
# 0 开头
if versionA == 0 or versionB == 0:
return 0
# 相同位置
elif versionA == versionB:
return versionA
# 相同父级
if dictMat[versionA]['parent'] == dictMat[versionB]['parent']:
return dictMat[versionA]['parent']
# 互为父子
elif dictMat[versionA]['parent'] == versionB:
return versionB
elif dictMat[versionB]['parent'] == versionA:
return versionA
else:
# 距离根节点远的向上爬
if dictMat[versionA]['times'] > dictMat[versionB]['times']:
versionA = dictMat[versionA]['parent']
else:
versionB = dictMat[versionB]['parent']



京公网安备 11010502036488号