AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 商店
  • 应用
  • 文章
    • 题解
    • 分享
    • 问答
  • 吐槽
  • 登录/注册

LeetCode 1306. 跳跃游戏 III C#    原题链接    中等

作者: 作者的头像   hpstory ,  2022-08-02 16:39:53 ,  所有人可见 ,  阅读 37


1


C# 递归代码

public class Solution {
    public bool CanReach(int[] arr, int start) {
        return Reach(arr, start, new bool[arr.Length]);
    }

    private bool Reach(int[] arr, int start, bool[] used){
        if (start < 0 || start >= arr.Length || used[start]) return false;
        if (arr[start] == 0) return true;
        used[start] = true;
        bool left = Reach(arr, start - arr[start], used);
        bool right = Reach(arr, start + arr[start], used);
        return left || right;
    }
}

C# 迭代代码

public class Solution {
    public bool CanReach(int[] arr, int start) {
        int n = arr.Length;
        bool[] used = new bool[n];
        Queue<int> queue = new Queue<int>();
        queue.Enqueue(start);
        while (queue.Count > 0){
            int current = queue.Dequeue();
            if (arr[current] == 0) return true;

            if ((current + arr[current]) < n && !used[current + arr[current]]){
                queue.Enqueue(current + arr[current]);
                used[current + arr[current]] = true;
            }

            if ((current - arr[current]) >= 0 && !used[current - arr[current]]){
                queue.Enqueue(current - arr[current]);
                used[current - arr[current]] = true;
            }
        }

        return false;
    }
}

0 评论

你确定删除吗?
1024
x

© 2018-2022 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息