from typing import List class Solution: def isSelfCrossing(self, distance: List[int]) -> bool: # 逆时针,只需要记录前面三个点,没次运动都跟前面三个点做比较 # a: if len(distance) <= 3: return False # 一开始走三步 # 保存前6步参数 p = [distance[0], distance[1], distance[2]] # direction = 3 # 0 上边, 1 左边 2 下 3 右 for i in range(3, len(distance)): d = distance[i] if len(p) < 6: p.append(d) else: p[:5] = p[1:] p[5] = d # 3步判断 if p[2] == p[0] and p[3] >= p[1]: return True elif p[2] <= p[0] and p[3] >= p[1]: return True if len(p) < 5: continue # 5步判断 if p[1] == p[3] and p[2] == p[0]+p[4]: return True elif p[3] < p[1] and p[4] >= p[2]: return True # 6步判断 if len(p) < 6: continue if p[3] >= p[1] and p[4] <= p[2] : if p[4] == p[2]-p[0]: if p[3] == p[5]+p[1]: return True if p[4] < p[2]-p[0]: if p[5] >= p[3]: return True elif p[4] <= p[2] : if p[5] >= p[3]-p[1]: return True elif p[3] < p[1] and p[5] >= p[3]: return True return False if __name__ == '__main__': s = Solution() crossing = s.isSelfCrossing([1,1,3,2,1,1]) print(crossing) pass