Permutations 全排列 回溯

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].

Hide Tags

Backtracking

建立一棵树,比如说

1234

1234           2134           3214         4231     //就是swap(1,1)  swap(1,2) swap(1,3) swap(1,4)

|

1234  1324  1432                        //就是swap(2,2)  swap(2,3) swap(2,4)

|

1234  1243                                  //就是swap(3,3)  swap(3,4)

然后,就用DFS遍历,叶子节点就是我们想要的

class Solution {
private:
    vector<vector<int> > ret;
public:
    void perm(vector<int> num,int i){
        if(i==num.size()){
            ret.push_back(num);
            return;
        }
        for(int j=i;j<num.size();j++){
            swap(num[i],num[j]);
            perm(num,i+1);
            swap(num[j],num[i]);           //复原,进行下一个交换前需复原之前状态
        }
    }
    vector<vector<int> > permute(vector<int> &num) {
        perm(num,0);
        return ret;
    }
};
时间: 2024-11-03 20:50:33

Permutations 全排列 回溯的相关文章

[LeetCode] 46. 全排列(回溯)

题目 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/permutations 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. 题解 回溯 使用位掩码数组的方式可以模拟集合拿出放入,以处理int[] num的拿出放入

lightoj-1023 - Discovering Permutations(全排列)

1023 - Discovering Permutations PDF (English) Statistics ForumTime Limit: 0.5 second(s) Memory Limit: 32 MBIn this problem you have to find the permutations using the first N English capital letters. Since there can be many permutations, you have to

leetcode permutations(全排列)

Given a collection of distinct 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]. 这其实是一个全排列问题.具有较强的普遍性 一开始自己想了个办法,但是这个办法每次循环都要生成一个ArrayList标记已经访问的位置

46. Permutations (全排列)

Given a collection of distinct 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], [3,2,1] ] 运用递归. 1234为例子 for  i in 1234: 1  +  234(的全排列) 2  +  134(的全排列) 3  +

46 Permutations(全排列Medium)

题目意思:全排列 思路:其实看这题目意思,是不太希望用递归的,不过还是用了递归,非递归的以后再搞吧 ps:vector这玩意不能随便返回,开始递归方法用vector,直接到500ms,换成void,到12ms 1 class Solution { 2 public: 3 vector<vector<int>> permute(vector<int>& nums) { 4 vector<vector<int> >ans; 5 permute

题目1120:全排列(回溯法)

题目链接:http://ac.jobdu.com/problem.php?pid=1120 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: // // 1120 全排列.cpp // Jobdu // // Created by PengFei_Zheng on 23/04/2017. // Copyright © 2017 PengFei_Zheng. All rights reserved. // #include <stdio.

LeetCode 46 Permutations (全排列)

Given a collection of distinct 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], [3,2,1] ] 题目链接:https://leetcode.com/problems/permutations/ 题目大意:求全排列 题目分析:求

全排列-回溯

class Solution { public void back(int n,ArrayList<Integer> nums,List<List<Integer>> output,int first){ if(first==n)output.add(new ArrayList<Integer>(nums)); for(int i=first;i<n;i++){ Collections.swap(nums,first,i); back(n,nums,o

全排列总结

接触全排列已经好长时间了,一直没有抽空总结一下全排列的相关问题,下面来说一下! 排列 一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(Arrangement).特别地,当m=n时,这个排列被称作全排列(Permutation). 排列数公式: 特别,当n==m时为全排列的公式! 下一个全排列算法 lintcode链接:http://www.lintcode.com/zh-cn/problem/next-permutation/ 样例