335. 路径交叉-数学归纳法(力扣目前c语言)

335. 路径交叉-数学归纳法

给你一个整数数组 distance 。

从 X-Y 平面上的点 (0,0) 开始,先向北移动 distance[0] 米,然后向西移动 distance[1] 米,向南移动 distance[2] 米,向东移动 distance[3] 米,持续移动。也就是说,每次移动后你的方位会发生逆时针变化。

判断你所经过的路径是否相交。如果相交,返回 true ;否则,返回 false 。
335. 路径交叉-数学归纳法(力扣目前c语言)_第1张图片

输入:distance = [2,1,1,2]
输出:true
335. 路径交叉-数学归纳法(力扣目前c语言)_第2张图片

输入:distance = [1,2,3,4]
输出:false
335. 路径交叉-数学归纳法(力扣目前c语言)_第3张图片
输入:distance = [1,1,1,1]
输出:true

这题看着复杂多了,其实有有迹可循的,当我们把各种可能相交的结果图画出来就会发现,相交的情况其实是有规律的,而且只跟最近的几条线的情况有关,解题代码如下:

bool isSelfCrossing(int* distance, int distanceSize){
    for(int i=3;i<distanceSize;i++){
        if(i==3){
            if(distance[2]<=distance[0]&&distance[3]>=distance[1]){
                return true;
            }

        }
        else{
            if(i==4)
            if(distance[i-1]==distance[i-3]&&distance[i]+distance[i-4]>=distance[i-2]){
                return true;
            }
            if(i>=5){
                if(distance[i-1]<=distance[i-3]&&distance[i]>=distance[i-2]){
                    return true;
                }


if(distance[i-2]>=distance[i-4]&&distance[i-1]<=distance[i-3]&&distance[i-1]+distance[i-5]>=distance[i-3]&&distance[i]+distance[i-4]>=distance[i-2]){
                    return true;
                }
             }


        }

    }
    return false;
    
}

你可能感兴趣的:(c++与c语言,力扣刷题,leetcode,c语言,算法)