Почему мой метод рекурсивного обратного отслеживания leetcode не подходит для использования такого параметра?

#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. Ух ты! ваш комментарий такой замечательный. Я понял!!! Большое спасибо.