Skip to content

Latest commit

 

History

History
40 lines (30 loc) · 1.4 KB

335.md

File metadata and controls

40 lines (30 loc) · 1.4 KB

335 Self Crossing

Description

link


Solution

对于这道题来说只有三种情况会相交:

  1. 第四条边和第一条边相交
    • 条件是第一条边大于等于第三条边,第四条边大于等于第二条边
    • 适用于第五条边和第二条边相交,第六条边和第三条边相交等等
  2. 第五条边和第一条边重合相交
    • 条件是第二条边和第四条边相等,第五条边大于等于第三条边和第一条边的差值
    • 适用于第六条边和第二条边重合相交的情况等等
  3. 第六条边和第一条边相交
    • 条件是第四条边大于等于第二条边,第三条边大于等于第五条边,第五条边大于等于第三条边和第一条边的差值,第六条边大于等于第四条边和第二条边的差值
    • 适用于第七条边和第二条边相交的情况等等

画个图就明白了


Code

class Solution:
    def isSelfCrossing(self, x: List[int]) -> bool:
        for i in range(3, len(x)):
            if x[i] >= x[i - 2] and x[i - 3] >= x[i - 1]:
                return True
            if i >= 4 and x[i-1] == x[i-3] and x[i] >= x[i-2] - x[i-4]:
                return True
            if i >= 5 and x[i-2] >= x[i-4] and x[i-3] >= x[i-1] and x[i-1] >= x[i-3] - x[i-5] and x[i] >= x[i-2] - x[i-4]:
                return True
        return False