#java #recursion #recursive-backtracking
#java #рекурсия #рекурсивное-обратное отслеживание
Вопрос:
Я пытался решить Leetcode JumpGame, используя проблему рекурсивного обратного отслеживания следующим методом. Это неправильно, но мой ответ — это всего лишь одно имя переменной, отличное от решения. Я использовал «position» вместо «nextPosition» в рекурсии. Можете ли вы помочь мне с причиной?
Мой код:
class Solution {
public boolean canJump(int[] nums) {
int location=0;
int end=nums.length-1;
return backtrack(nums,location,end);
}
private boolean backtrack(int[] nums, int location, int end){
//end condition
if(location==end){
return true;
}
//recursion
for(int i=1;i<=nums[location];i ){
location=Math.min(location i,end); //jump! location updated
if(backtrack(nums,location,end)){
return true;
}
}
return false;
}
}
Решение:
public class Jumpgame55 {
public boolean canJump(int[] nums) {
int location = 0;
int end = nums.length - 1;
return backtrack(nums, location, end);
}
private boolean backtrack(int[] nums, int location, int end) {
//end condition
if (location == end) {
return true;
}
//recursion
for (int i = 1; i <= nums[location]; i ) {
int nextlocation = Math.min(location i, end); //jump! location updated
if (backtrack(nums, nextlocation, end)) {
return true;
}
}
return false;
}
}
Комментарии:
1. Да, во время обратного отслеживания рекурсии вам понадобится ваша исходная переменная местоположения. поскольку он изменен, ваш цикл также изменится, и вы не получите правильного ответа для Math.min(location i,end); поскольку ваша переменная location изменилась. Надеюсь, это поможет.
2. Ух ты! ваш комментарий такой замечательный. Я понял!!! Большое спасибо.