LeetCode113 記錄一次因爲提前return而導致的錯誤

LeetCode113 記錄一次因爲提前return而導致的錯誤

首先貼上錯誤的截圖

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-STbqYzaa-1592814427200)(C:\Users\zhao\Desktop\1.jpg)]

這裏 我認爲這個錯誤原因還是有必要記錄和分析一下的

我們發現 在我們的輸出測試中 多了1個4,也就是說4並沒有被remove掉 通過分析發現 這裏因爲我在紅框選中的地方提前return了

正常情況下 當我們找到一條5 4 11 2 這個路徑之後 我們要在temp數組當中把2 remove掉 可是根據我的錯誤的代碼 在找到5 4 11 2 這個路徑之後 我卻直接把他return了 我們看這個圖 這個圖展示了正確的情況

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-y1wo6xhF-1592814427205)(C:\Users\zhao\Desktop\2.jpg)]

可是 我犯的錯誤就是在這裏直接return了 我們來看直接return的後果

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-egMCDubM-1592814427208)(C:\Users\zhao\Desktop\3.jpg)]

這樣造成的後果就是 該remove11 的時候 我remove了2 該remove 4的 時候 我才remove11 這樣就把4剩下了

於是造成了第一張錯誤貼圖的結果

正確代碼如下

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<List<Integer>> pathSum(TreeNode root, int sum) {
        List<List<Integer>> result=new ArrayList<>();
        if(root==null)
            return result;
        return DFS(root,sum,new ArrayList<>(),result);
    }

    public List<List<Integer>> DFS(TreeNode node,int sum,List<Integer> temp,List<List<Integer>> result){   
        if(node==null)
            return result;

        temp.add(node.val);

        if(node.left==null&&node.right==null&&sum==node.val){
            result.add(new ArrayList<Integer>(temp));
        }

        DFS(node.left,sum-node.val,temp,result);
        DFS(node.right,sum-node.val,temp,result);
    
        temp.remove(temp.size()-1);
        return result;
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章