46. 全排列/47. 全排列 II

2020-07-25

1.题目描述

给定一个 没有重复 数字的序列,返回其所有可能的全排列。

2.题解

交换元素

3.代码

class Solution {
    
    
public:
    vector<vector<int>> permute(vector<int>& nums) {
    
    
        int len=nums.size();
        if (!len) return vector<vector<int>>(0);
        dfs(nums,0,len);
        return res;
    }

    void dfs(vector<int> nums, int step,int len){
    
    
        if (step==len){
    
    
            res.push_back(nums);
            return;
        }
        for (int i=step;i<len;i++){
    
    
            swap(nums[i],nums[step]);
            dfs(nums,step+1,len);
            swap(nums[i],nums[step]);
        }
    }

    vector<vector<int>> res;
};
class Solution {
    
    
public:
    vector<vector<int>> permuteUnique(vector<int>& nums) {
    
    
        int len=nums.size();
        if (!len) return vector<vector<int>>(0);
        dfs(0,len,nums);
        return res;
    }

    void dfs(int step,int len,vector<int>& nums){
    
    
        if (step==len){
    
    
            res.push_back(nums);
            return ;
        }

        for (int i=step;i<len;i++){
    
    
            bool f=true;
            for (int j=i+1;j<len;j++){
    
    
                if (nums[j]==nums[i]){
    
    
                    f=false;
                    break;
                }
            }
            if (i==step||(nums[i]!=nums[step]&&f)){
    
    
                swap(nums[i],nums[step]);
                dfs(step+1,len,nums);
                swap(nums[i],nums[step]);
            }
        }
    }

    vector<vector<int>> res;
};

猜你喜欢

转载自blog.csdn.net/qq_34600424/article/details/107575023