Leedcode刷题 | 回溯算法小总结01
回溯算法中是否需要对数组排序:
需要排序的情况:
- 去重问题:当题目要求结果不能包含重复的组合或子集时,通常需要排序。
- 例如:40组合总和 II、90子集 II 等问题中,输入数组可能包含重复元素
- 排序后可以方便地检测相邻的重复元素,实现跳过重复解的逻辑
- 需要按特定顺序输出:如果题目要求结果必须按字典序输出,排序是必要的
- 剪枝优化:某些情况下,排序可以帮助提前剪枝
- 例如:在组合总和类问题中(39组合总和),如果排序后发现当前元素已经使总和超过目标值,可以直接结束当前分支
不需要排序的情况:
- 单纯的组合/排列问题:如果输入数组中没有重复元素,且不要求特定顺序
- 例如:简单的子集问题、组合问题
- 保持原始顺序很重要:某些问题要求保持原始输入的顺序(IP地址)
- 元素顺序无关:例如像N皇后问题这样的问题,与输入顺序无关