LeetCode113 記錄一次因爲提前return而導致的錯誤
首先貼上錯誤的截圖
這裏 我認爲這個錯誤原因還是有必要記錄和分析一下的
我們發現 在我們的輸出測試中 多了1個4,也就是說4並沒有被remove掉 通過分析發現 這裏因爲我在紅框選中的地方提前return了
正常情況下 當我們找到一條5 4 11 2 這個路徑之後 我們要在temp數組當中把2 remove掉 可是根據我的錯誤的代碼 在找到5 4 11 2 這個路徑之後 我卻直接把他return了 我們看這個圖 這個圖展示了正確的情況
可是 我犯的錯誤就是在這裏直接return了 我們來看直接return的後果
這樣造成的後果就是 該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;
}
}