1306. 跳跃游戏 III BFS+DFS

#1306. 跳跃游戏 III

难度:中等
类似题目:55.跳跃游戏
题目描述
在这里插入图片描述
解题思路

1、BFS

很经典的BFS啦

public static boolean canReach(int[] arr, int start) {
   	if(arr[start] == 0)
    		return true;
   	int n = arr.length;
   	Queue<Integer> queue = new LinkedList<Integer>();
   	int[] visit = new int[n];
   	queue.add(start);
   	visit[start] = 1;
   	while(!queue.isEmpty()) {
    		int s = queue.poll();
    		if(arr[s] == 0)
     			return true;
   	 	int left = s-arr[s];
    		int right = s+arr[s];
    		if(right < n && visit[right] != 1) { 
      			queue.add(right) ;
      			visit[right] = 1;
    		}
    		if(left >= 0 && visit[left] != 1) {
      			queue.add(left) ;
      			visit[left] = 1;
   		}
   	}
   	return false;
     }

在这里插入图片描述
内存居然超越100%,明明感觉队列什么占了挺多内存的,就很不懂

2、DFS

public boolean canReach(int[] arr, int start) {
   	if(arr[start] == 0)
    		return true;
   	int n = arr.length;
   	int[] visit = new int[n];
   	return dfsJump(arr,visit,start);
     }
 public boolean dfsJump(int[] arr,int[] visit,int s) {
   	int n = arr.length;
   	if(s < 0 || s >=  n || visit[s] == 1)
    		return false;
   	int left = s-arr[s];
   	int right = s+arr[s];
   	if(arr[s] == 0)
    		return true;
   	visit[s] = 1;
   	return  dfsJump(arr, visit, left) || dfsJump(arr, visit, right);
 }

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值