46、47-Permutations

来源:互联网 发布:java 格式化html 编辑:程序博客网 时间:2024/05/16 11:51

难度:medium

题目描述

46-Permutations I:

这里写图片描述

47-Permutations II:

这里写图片描述

算法分析

46:
直接使用函数next_permutation(_vector.begin(), _vector.end())
47:
在46题的基础上,使用二层循环,对得到的全排列两两进行比较,删除重复的排列

代码实现

46:

//  use function next_permutationclass Solution {public:    vector<vector<int>> permute(vector<int>& nums) {        vector<vector<int>> result;        sort(nums.begin(), nums.begin()+nums.size());        do {            result.push_back(nums);        } while (next_permutation(nums.begin(), nums.begin() + nums.size()));        return result;    }};

47:

class Solution {public:    vector<vector<int>> permuteUnique(vector<int>& nums) {        vector<vector<int>> result;        sort(nums.begin(), nums.begin()+nums.size());        do {            result.push_back(nums);        } while (next_permutation(nums.begin(), nums.begin() + nums.size()));        int n = result.size();        for (int i = 0; i < result.size(); ++i) {            for (int j = i + 1; j < result.size(); ++j) {                if (isSame(result[i], result[j]))                    result.erase(result.begin() + j);            }        }        return result;    }    bool isSame(vector<int> a, vector<int> b) {        int n = a.size();        for (int i = 0; i < n; ++i) {            if (a[i] != b[i]) return false;        }        return true;    }};