335. 路径交叉-数学归纳法
给你一个整数数组 distance 。
从 X-Y 平面上的点 (0,0) 开始,先向北移动 distance[0] 米,然后向西移动 distance[1] 米,向南移动 distance[2] 米,向东移动 distance[3] 米,持续移动。也就是说,每次移动后你的方位会发生逆时针变化。
判断你所经过的路径是否相交。如果相交,返回 true ;否则,返回 false 。
输入:distance = [2,1,1,2]
输出:true
输入:distance = [1,2,3,4]
输出:false
输入: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;
}