1306. 跳跃游戏 III

经过测试,两种写法耗时差距10倍,我也不知道原因是啥
用访问次数的是更快的

class Solution {
public:
    int n;
    bool dfs(vector<int>& arr, int start, vector<int>& visited){
        if(start<0||start>=n || visited[start]==1) 
            return false;
        visited[start]++;
        if(arr[start]==0)
            return true;
        return dfs(arr,start+arr[start],visited)||dfs(arr,start-arr[start],visited);
    }
    bool canReach(vector<int>& arr, int start) {
        n=arr.size();
        vector<int>visited(n,0);
        return dfs(arr, start, visited);
    }
};

是否访问过是更慢的

class Solution {
public:
    int n;
    bool dfs(vector<int>& arr, int start, vector<bool>& visited){
        if(start<0||start>=n || visited[start]) 
            return false;
        visited[start]=true;
        if(arr[start]==0)
            return true;
        return dfs(arr,start+arr[start],visited)||dfs(arr,start-arr[start],visited);
    }
    bool canReach(vector<int>& arr, int start) {
        n=arr.size();
        vector<bool>visited(n,false);
        return dfs(arr, start, visited);
    }
};

你可能感兴趣的:(LeetCode,游戏,算法,深度优先)