LeetCode 1306 跳躍遊戲 III (java版)

這裏有一個非負整數數組 arr,你最開始位於該數組的起始下標 start 處。當你位於下標 i 處時,你可以跳到 i + arr[i] 或者 i - arr[i]。

請你判斷自己是否能夠跳到對應元素值爲 0 的 任意 下標處。

注意,不管是什麼情況下,你都無法跳到數組之外。

示例 1:

輸入:arr = [4,2,3,0,3,1,2], start = 5
輸出:true
解釋:
到達值爲 0 的下標 3 有以下可能方案:
下標 5 -> 下標 4 -> 下標 1 -> 下標 3
下標 5 -> 下標 6 -> 下標 4 -> 下標 1 -> 下標 3
示例 2:

輸入:arr = [4,2,3,0,3,1,2], start = 0
輸出:true
解釋:
到達值爲 0 的下標 3 有以下可能方案:
下標 0 -> 下標 4 -> 下標 1 -> 下標 3
示例 3:

輸入:arr = [3,0,2,1,2], start = 2
輸出:false
解釋:無法到達值爲 0 的下標 1 處。

提示:

1 <= arr.length <= 5 * 10^4
0 <= arr[i] < arr.length
0 <= start < arr.length

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/jump-game-iii

解題思路:深度優先搜索,用遞歸,用數據標記該位置是否執行過

代碼:

class Solution {
    int length;
	int[] isTrue;
	int[] arrQ;
	public boolean canReach(int[] arr, int start) {
	  
		length = arr.length;
		isTrue = new int[length];
		arrQ = arr;
        return dfs(start);  
    }
	
	public boolean dfs(int start) {
		if(start < 0 || start >= length){
			return false;
		}
		
		if(arrQ[start]==0){
			return true;
		}
		
		if(isTrue[start]==1){
			return false;
		}else{
			isTrue[start]=1;
			return dfs(start+arrQ[start])||dfs(start-arrQ[start]);
		}
	}
}

結果:
在這裏插入圖片描述

發佈了35 篇原創文章 · 獲贊 22 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章