46.全排列

题目:46. 全排列

class Solution {
public:
    //【【【DevC++中类内的成员往往无法调试,所以上机时尽量不要定义类,直接写函数,回溯法使用的path、finalPath、nums等直接定义为全局变量即可】】】
    vector<int> path;
    vector<vector<int>> finalPath;
    bool used[200]={false};//此外C++不能使用vector<bool>
    void backtracking_FullPermutation(vector<int> nums,vector<int> &path,vector<vector<int>> &finalPath,bool *used){
        //终止条件
        if(path.size()==nums.size()){
            finalPath.push_back(path);
            return;
        }
        for(int i=0;i<nums.size();i++){//注意和组合不同,此处的i不是从startIndex开始!
            //回溯模板
            if(!used[i]){//使用used变量,并且不需要传递startIndex,每次都让i初值为0而使用used数组决定当前的options列表
                used[i]=true;
                path.push_back(nums[i]);
                backtracking_FullPermutation(nums,path,finalPath,used);
                path.pop_back();
                used[i]=false;
            }
        }
    }

    vector<vector<int>> permute(vector<int>& nums) {
        backtracking_FullPermutation(nums,path,finalPath,used);
        return finalPath;
    }
};
posted @ 2025-03-19 22:26  Cheauncey  阅读(22)  评论(0)    收藏  举报