335. 路径交叉

image-20211029102151630

解题思路:

​ 这种归纳的题目是真的不太熟且感觉意义不大。。,根据题解,最多只需要关注最近所画的五条边即可,且总共具有四种可能的情况,如下图所示,分别根据四种可能的情况列出if的判断式子即可。

示例

以下为C++代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
bool isSelfCrossing(vector<int>& distance) {
//一道类似归纳的题目
//只需要关注近5条边即可
int length=distance.size();
for(int i=3;i<length;i++){
//第一种情况
if (distance[i-1]<=distance[i-3]&&distance[i]>=distance[i-2]) return true;
if (i>=4&&distance[i]+distance[i-4]==distance[i-2]&&distance[i-1]==distance[i-3]) return true;
if (i>=5&&distance[i-4]<=distance[i-2]&&distance[i]>=distance[i-2]-distance[i-4]&&distance[i-1]>=distance[i-3]-distance[i-5]&&distance[i-1]<=distance[i-3]&&distance[i-3]>=distance[i-5]) return true;
}

return false;
}
};