2022-01-10:路径交叉。给你一个整数数组 distance 。 从 X-Y 平面上的点 (0,0) 开始,先向北移动 distance[0] 米,然后向西移动 distance[1] 米,向南移动 distance[2] 米,向东移动 distance[3] 米,持续移动。也就是说,每次移动后你的方位会发生逆时针变化。 判断你所经过的路径是否相交。如果相交,返回 true ;否则,返回 false 。 力扣335。

答案2022-01-10:

讨论4种情况。 1.i跟i-3撞。 2.i跟i-4撞,追尾。 3.i跟i-5撞。 4.i跟i-6撞。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
    arr := []int{2, 2, 3, 2, 2}
    fmt.Println(isSelfCrossing(arr))
}

func isSelfCrossing(x []int) bool {
    if len(x) < 4 {
        return false
    }
    if (len(x) > 3 && x[2] <= x[0] && x[3] >= x[1]) || (len(x) > 4 && ((x[3] <= x[1] && x[4] >= x[2]) || (x[3] == x[1] && x[0]+x[4] >= x[2]))) {
        return true
    }
    for i := 5; i < len(x); i++ {
        if x[i-1] <= x[i-3] && ((x[i] >= x[i-2]) || (x[i-2] >= x[i-4] && x[i-5]+x[i-1] >= x[i-3] && x[i-4]+x[i] >= x[i-2])) {
            return true
        }
    }
    return false
}

执行结果如下: 图片


左神java代码