簡體   English   中英

在遞歸調用后難以識別下一步編譯器將采取

[英]Having difficulty identifying the next step compiler will take after a recursive call

我很難理解這段代碼。


class Solution {
    public List<List<Integer>> subsets(int[] nums) {
     List<List<Integer>> subsets = new ArrayList<>();
     generateSubsets(0, nums, new ArrayList<Integer>(), subsets);
     return subsets;
    }
    public void generateSubsets(int index, int[] nums, List<Integer> current, List<List<Integer>> subsets){
        subsets.add(new ArrayList<>(current));
        for(int i = index; i < nums.length; i++){
            current.add(nums[i]);           
            generateSubsets(i + 1, nums, current, subsets);
            current.remove(current.size()-1);
          
        }
    }
}


我不明白這段代碼將如何在每一步運行這段代碼。 如果我們以輸入 [1,2,3] 為例。 我想首先我會得到當前列表 [1],然后是遞歸調用,新的當前列表是 [1,2],然后是一個新的遞歸調用,當前列表是 [1,2,3] 但我很困惑下一步將是。

如果有人能引導我完成這個過程,我將不勝感激。 特別是當代碼current.remove(current.size()-1); 被擊中。

非常感謝。

在感興趣的行設置斷點並使用您的 IDE 進行調試。 只是作為初學者,您還可以放置一些 println 語句來遵循遞歸代碼流:

public static void generateSubsets(int index, int[] nums, List<Integer> current, List<List<Integer>> subsets){
    System.out.println("\nrecursive method called with index: " + index + " current list: " + current);
    subsets.add(new ArrayList<>(current));
    System.out.println("subsets after adding current: " + subsets);
    for(int i = index; i < nums.length; i++){
        System.out.println("entering loop at index: " + index);
        current.add(nums[i]);
        System.out.println("current after adding current index: " + current);
        generateSubsets(i + 1, nums, current, subsets);
        current.remove(current.size()-1);
        System.out.println("current after removing last element back at index: "+ index + " " +current);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM