`
cozilla
  • 浏览: 92567 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

[Leetcode] Permutations / Permutations II

 
阅读更多
Permutations IIMar 17 '124943 / 12877

Given a collection of numbers that might contain duplicates, return all possible unique permutations.

For example,
[1,1,2] have the following unique permutations:
[1,1,2][1,2,1], and [2,1,1].

生成的方法其实和permutation差不多,最大的差别就是unique

思考一下,生成时候的流程:每次从后面去一个数num[i],替换num[cur]。

因为num内存在相同的数,也就是说,num[i] 可能和num[j]相同。

因此如果num[i]已经在cur这个位置上出现过,这num[j]可以直接跳过去。

class Solution {
public:
    vector<vector<int> > permuteUnique(vector<int> &num) {
        int len = num.size();
        vector<vector<int> > res;
        sort(num.begin(), num.end());
        gen(res, num, 0, len);
        return res;
    }
    
    bool isSwap(vector<int>& num, int s, int e) {
        int i = s;
        while (num[i] != num[e] && i < e) i++;
        if (i == e) return true;
        else return false;
    }
    void gen(vector<vector<int> > &res, vector<int>& num, int cur, int len) {
        if (cur == len) {
            res.push_back(num);
            return;
        }

        for (int i = cur; i < len; i++) {
            if (!isSwap(num, cur, i)) continue;
            swap(num[cur], num[i]);
            gen(res, num, cur+1, len);
            swap(num[cur], num[i]);
        }
    }
};

 

 

PermutationsMar 17 '125872 / 13772

Given a collection of numbers, return all possible permutations.

For example,
[1,2,3] have the following permutations:
[1,2,3][1,3,2][2,1,3][2,3,1][3,1,2], and [3,2,1].

 

class Solution {
public:
    vector<vector<int> > permute(vector<int> &num) {
        int len = num.size();
        vector<vector<int> > res;
        gen(res, num, 0, len);
        return res;
    }
    void gen(vector<vector<int> > &res, vector<int>& num, int cur, int len) {
        if (cur == len) {
            res.push_back(num);
            return;
        }
        for (int i = cur; i < len; i++) {
            swap(num[cur], num[i]);
            gen(res, num, cur+1, len);
            swap(num[cur], num[i]);
        }
    }
};

 http://blog.csdn.net/morewindows/article/details/7370155

分享到:
评论

相关推荐

    LeetCode Permutation

    Source file for LeetCode Permutations Problem

    C语言-leetcode题解之47-permutations-ii.c

    c语言入门 C语言_leetcode题解之47-permutations-ii.c

    js-leetcode题解之47-permutations-ii.js

    js js_leetcode题解之47-permutations-ii.js

    C语言-leetcode题解之46-permutations.c

    c语言入门 C语言_leetcode题解之46-permutations.c

    js-leetcode题解之46-permutations.js

    js js_leetcode题解之46-permutations.js

    leetcode分类-LeetCode:LeetCode在线裁判C++

    II 其他变种 编程之美 Preorder Traversal Inorder Traver sal postorder 非递归 不用栈! 字符串常用操作 字符串 各种转换 Pow(x,n) 优化 Permutations (交换 取子集两种方式) Trie树 11 中序遍历 无堆栈 (前序 ...

    leetcode 46. Permutations 迭代+递归 python3

    LeetCode第46题,题目要求根据给定的整数集合,返回所有可能的排列组合。这个问题属于组合数学与算法设计的范畴,主要考察的是全排列的生成。 【解题思路】 1. **递归算法**:递归方法是从剩余未使用的元素中选择...

    _leetcode-python.pdf

    - Permutations / Permutations II: 生成所有可能的排列组合,考虑重复元素的情况。 - Rotate Image: 给定一个二维矩阵,将它顺时针旋转90度。 - Group Anagrams: 组合所有字母异位词,即将字母顺序不同但字母组合...

    LeetCode 46. 全排列

    题目来源:https://leetcode-cn.com/problems/permutations/ 题目 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,...

    leetcode怎么销号-LeetCode-Solutions:我自己的LeetCode解决方案

    leetcode怎么销号 LeetCode-Solutions :green_heart:My own LeetCode solutions No. Problem LeetCode 力扣 Python Go Solution Difficulty Tag 0017 Letter Combinations of a Phone Number Medium 回溯、暴力 0034...

    leetcode怎么计算空间复杂度是指-LeetCode-Solution:我的第一个LeetCode解决方案

    leetcode怎么计算空间复杂度是指 LeetCode-Solution my first solution of LeetCode 2015-5-7 Problem 95,98(80 already!) 我经常在递归的结束地方忘记return!!! 题型一:经典暴力递归:(里面涉及到重复不重复的...

    leetcode最大连通域-leetcode:leetcode

    permutations2.py - 返回所有可能的唯一排列 3sum_2.py - 查找数组中所有唯一的三元组,其总和为零。 3sum.py - 查找数组中所有唯一的三元组,其总和为零。 first_last_pos_array.py - 找到给定目标值的开始和结束...

    c++-c++编程基础之leetcode题解第47题全排列II.zip

    第47题"全排列II"(Permutations II)是LeetCode中的一道经典题目,它涉及到组合数学和递归的思想。在本题中,任务是找出所有可能的无重复字符的全排列。 全排列问题通常使用回溯法来解决,这是一种通过尝试所有...

    leetcode2-leetcode-30days:30天内写30个LeetCode

    leetcode 2 LeetCode - 30 Days 前言 相信所有写程式的人在面试前,总是在揣测在白板题会被问到什么问题,而我们最常听到的准备方式就是“刷”。上有数百个可能是面试官问你的题目,我把它...Permutations 目录 ref:

    2sumleetcode-LeetCode:力码

    leetcode 轮廓 1_count_and_say.cpp - super_ugly_number.cpp - Detect_Pattern.cpp - degree_of_array.cpp - 键盘.cpp - 2Sum_Data_Structure_Design.cpp - shuffle_array.cpp - permutations.cpp - kth_missing_...

    leetcode1-300.docx

    LeetCode 算法题解析 从给定的文件信息中,我们可以看到,这是一个关于 LeetCode 算法题的知识点总结。下面我们将对标题、描述、标签和部分内容进行详细的解析和总结。 标题:leetcode1-300.docx 这个标题表明了...

    c++-c++编程基础之leetcode题解第46题全排列.zip

    本资源包聚焦于LeetCode的第46题,名为"全排列"(Permutations)。这道题目要求我们找到所有可能的排列方式,对于一个给定的没有重复数字的数组。解这类问题,我们可以使用回溯法或者深度优先搜索(DFS)策略来完成...

Global site tag (gtag.js) - Google Analytics