dfs的心得 灵山提出两个dfs遍历的做法1.选还是不选实现代码void dfs(vectorint nums, int i) {if (i nums.size()) {ans.push_back(path);return;} //先判断dfs(nums, i 1); // 不选path.push_back(nums[i]); // 选dfs(nums, i 1);path.pop_back();}2.站在答案视角每次必须选一个数。怕{12}{21}重复可用for循环从小到大或者从大到小进行一个排列。思路path代表走过的路径我们会回溯到前面然后再寻求路径出发大道至简的意思是在完成第一次回退的过程中要保证两个操作1撤销这一步 2尝试其他选择把路径更新void dfs(vectorint nums, int i ){ans.push_back(path);//记录所有走过路径for(int j i; jnums.size(); j){path.push_back(nums[j]);dfs(nums,j1);path.pop_back();}}每一次for循环都走想两个不同选择一个加元素一个弹出元素一 1 - 12 - 123 - 1234 - 12345二 1 - 21被弹出- ......path相当于从头到尾的保存了所有路径