您的位置:首页 > 编程语言 > C语言/C++

【每日打卡】Day1:全排列的C++实现

2019-04-09 23:20 141 查看

 题目来源:Leetcode

[code]//不含重复元素
class Solution {
public:
    vector<vector<int>> all;      
    void swap(vector<int> &nums, int p, int q){
        int t = nums.at(p);
        nums.at(p) = nums.at(q);
        nums.at(q) = t;
    }    
        void allsort(vector<int> &nums, int p, int q){
        if(p == q){
            all.push_back(nums);
        }
        else{
            for(int i = p-1; i >= q; i --){
                swap(nums,p-1,i);
                allsort(nums,p-1,q);
                swap(nums,p-1,i);
            }
        }
    }    
    vector<vector<int>> permute(vector<int>& nums) {
        allsort(nums,nums.size(),0);
        return all;
    }    
};
[code]//含重复元素
class Solution {
public:
vector<vector<int>> all;
bool flag(vector<int> &nums, int p, int q){
bool yes = true;
for(int i = p; i < q; i ++){
if(nums.at(i) == nums.at(q)){
yes = false;
break;
}
}
return yes;
}
void swap(vector<int> &nums, int p, int q){
int t = nums.at(p);
nums.at(p) = nums.at(q);
nums.at(q) = t;
}

void allsort(vector<int> &nums, int p, int q){
if(p == q){
all.push_back(nums);
}
else{
for(int i = p; i < q; i ++){
if(flag(nums,p,i)){
swap(nums,p,i);
allsort(nums,p+1,q);
swap(nums,p,i);
}

}
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
allsort(nums,0,nums.size());
return all;
}
};

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: