官方解答给出时间复杂度是O(N^(T/M)+1), N: # of candidates; T: target value; M: minimum number in candidates. 相当于dfs遍历一个高度为T/M 的 N-ary tree,节点个数为N^(T/M)+1.
@liangemma26993 жыл бұрын
讲的真好,时间复杂度分析的也特别详细。
@zy37494 жыл бұрын
感觉你讲的是最清楚的
@yi-shenglien4783 Жыл бұрын
不懂 Line#18 為什麼要 remove
@jing9792 Жыл бұрын
public static List combinationSum(int[] candidates, int target) { List res = new ArrayList(); helper(candidates, res, target, new ArrayList(), 0); return res; } private static void helper(int[] nums, List res, int target, List temp, int start) { if (target < 0) return; if (target == 0) { res.add(new ArrayList(temp)); return; } for (int i = start; i < nums.length; i++) { temp.add(nums[i]); System.out.println("Adding " + nums[i] + " at index " + i + " - Current Temp List: " + temp); helper(nums, res, target - nums[i], temp, i); temp.remove(temp.size() - 1); System.out.println("Removing " + nums[i] + " at index " + i + " - Current Temp List: " + temp); } } 你run這段程式碼你大概就會懂了
@123-f2r8v7 ай бұрын
因為要回溯,這其實就是深度優先搜索的應用,發現無路可走的時候就要退出
@yi-shenglien47837 ай бұрын
感謝大大回覆
@andyzhang97894 жыл бұрын
backtracking 这一类题目都挺难的啊,好像就没有easy的题,受益匪浅
@ouo94542 жыл бұрын
受益良多,但反而我開始擔心起自己數學了...
@dede61102 жыл бұрын
no need sort in the video but in your code page there is sort