DFS解法
class Solution {
vector<bool>visited;
vector<int>arr;
int len;
public:
bool DFS(int pos)
{
if(arr[pos] == 0)
{
return true;
}
bool res = false;
if(pos + arr[pos] < len && visited[pos+arr[pos]] == false)
{
visited[pos + arr[pos]] = true;
res = DFS(pos + arr[pos]);
}
if(res == false && pos - arr[pos] >= 0 && visited[pos-arr[pos]] == false)
{
visited[pos - arr[pos]] = true;
res = DFS(pos - arr[pos]);
}
return res;
}
bool canReach(vector<int>& arr, int start) {
this->visited = vector<bool>(arr.size(),false);
this->len = arr.size();
this->arr = arr;
return DFS(start);
}
};
写得不够干练
别人写的
class Solution {
public:
vector<bool> vis;
bool dfs(const vector<int>& arr, int idx) {
if (arr[idx] == 0) return true;
vis[idx] = true;
int left = idx - arr[idx], right = idx + arr[idx];
bool res = false;
if (left >= 0 && left < arr.size() && !vis[left])
res = dfs(arr, left);
if (!res && right >= 0 && right < arr.size() && !vis[right])
res = dfs(arr, right);
return res;
}
bool canReach(vector<int>& arr, int start) {
int n = arr.size();
vis.resize(n, false);
return dfs(arr, start);
}
};
作者:happy_yuxuan
链接:https://leetcode-cn.com/problems/jump-game-iii/solution/weeklycontest169-q3-tiao-yue-you-xi-iii-by-happy_y/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
BFS
class Solution {
public:
bool canReach(vector<int>& arr, int start) {
vector<bool>visited(arr.size(),false);
queue<int>q;
q.push(start);
visited[start] = true;
int len = arr.size();
while(!q.empty())
{
int pos = q.front();
q.pop();
if(arr[pos] == 0)
{
return true;
}
int left = pos - arr[pos];
int right = pos + arr[pos];
if(left >= 0 && visited[left] == false)
{
visited[left] = true;
q.push(left);
}
if(right < len && visited[right] == false)
{
visited[right] = true;
q.push(right);
}
}
return false;
}
};
别人写的:
class Solution {
public:
bool canReach(vector<int>& arr, int start) {
int n = arr.size();
vector<bool> vis(n, false);
queue<int> q;
q.push(start);
while (!q.empty()) {
int idx = q.front(); q.pop();
vis[idx] = true;
if (arr[idx] == 0) return true;
int left = idx - arr[idx], right = idx + arr[idx];
if (left >= 0 && left < n && !vis[left]) q.push(left);
if (right >= 0 && right < n && !vis[right]) q.push(right);
}
return false;
}
};
作者:happy_yuxuan
链接:https://leetcode-cn.com/problems/jump-game-iii/solution/weeklycontest169-q3-tiao-yue-you-xi-iii-by-happy_y/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。