LeetCode335. 路径交叉

给你一个整数数组 distance 。

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

判断你所经过的路径是否相交。如果相交,返回 true ;否则,返回 false 。

示例 1:


输入:distance = [2,1,1,2]
输出:true
示例 2:


输入:distance = [1,2,3,4]
输出:false
示例 3:


输入:distance = [1,1,1,1]
输出:true
 

提示:

1 <= distance.length <= 105
1 <= distance[i] <= 105

来源:力扣(LeetCode)
链接:力扣
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法一:暴力法(不断试错,逐渐满足测试条件) 

特点:代码很垃圾,易读性差,到处是return(有空再优化,把逻辑再理一理)

public class Solution 
{
    public bool IsSelfCrossing(int[] distance) 
    {
        return HleetCode.N335SelfCrossing.Commit(distance);
    }

    public partial class HleetCode
    {
        public static class N335SelfCrossing
        {

            public static bool Commit(int[] distance)
            {
                //提前返回条件
                if(distance.Length<4) return false;
                if((distance[2]<=distance[0])&&(distance[1]<=distance[3])) return true;

                for(int i=1;i<=distance.Length-4;i++)
                {
                    if(distance[i+1]>distance[i-1]&&distance[i+2]>distance[i]) continue;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值