335.路径交叉
https://leetcode-cn.com/problems/self-crossing/
本质上是个数学题,找到规律即可
规律
路线交叉有三种情况:
1.d[i]与d[i-3]交叉,如:向右的线刚好遇到向上的线的阻挡,产生交叉。
2.d[i]与d[i-4]重合,如:第二轮回的向上的线与第一轮回的向上的线刚好在一个横坐标上,产生交叉。
3.d[i]与d[i-5]交叉,与第一种类似,只是第一种是直接内卷,而第三种是先外卷之后再内卷。
可以自己画画就了然了。
class Solution {
public:
bool isSelfCrossing(vector<int>& distance) {
int len = distance.size();
if(len<=3){
return false;
}
for(int i=5;i<len;i++){
if(distance[i]>=distance[i-2] && distance[i-1]<=distance[i-3]) return true;
else if(i>=4&&distance[i]+distance[i-4] >=distance[i-2] && distance[i-1]==distance[i-3]) return true;
else if(i>=5&&distance[i-2]>distance[i-4] &&distance[i-1]<=distance[i-3]&&distance[i]+distance[i-4]>=distance[i-2] &&distance[i-1]+distance[i-5]>=distance[i-3]) return true;
}
return false;
}
};