46. 全排列

✅做题思路or感想

排列问题,一眼回溯法

排列问题注重元素间的排序,而集合问题不用。

故这里并不需要startIndex来进行控制元素取值范围,而是需要用used数组来记录元素是否使用过,避免一个元素的多次使用

递归三部曲

递归参数

  • 用一个used数组来记录使用记录

递归中止条件

  • temp和原数组等大时,就可以收网了

递归单层逻辑

  • 判断元素是否使用过,若没用过,则加入temp
class Solution {
public:
    vector<int>temp;
    vector<vector<int>>result;
    void dfs(vector<int>& nums, vector<bool>& used) {
        //递归中止条件
        if (temp.size() == nums.size()) {
            result.push_back(temp);
            return;
        }
        for (int i = 0; i < nums.size(); i++) {
            //防止一个元素使用多次
            if (used[i] == false) {
                temp.push_back(nums[i]);
                used[i] = true;
                dfs(nums, used);
                temp.pop_back();
                used[i] = false;
            }
        }
    }
    vector<vector<int>> permute(vector<int>& nums) {
        vector<bool>used(nums.size(), false);
        dfs(nums, used);
        return result;
    }
};
posted @   北原春希  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示