zoukankan      html  css  js  c++  java
  • LeetCode 046 Permutations

    题目要求: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].

    分析:

    参考网址:http://www.cnblogs.com/panda_lin/archive/2013/11/12/permutations.html

    可以使用STL的next_permutation函数。

    不使用的话,要递归生成全排列。

    ① 生成[2, 3]的全排列[2, 3]和[3, 2],然后把1加上去生成[1, 2, 3]和[1, 3, 2]。

    ② 交换1和2的位置,生成[1, 3]的全排列[1, 3]和[3, 1],然后把2加上去生成[2, 1, 3]和[2, 3, 1]。

    ③在第二步的基础上交换2和3的位置,生成[2, 1]的全排列[2, 1]和[1, 2],然后把3加上去生成[3, 2, 1]和[3, 1, 2]。

    ① [1, 2, 3]  [1, 3, 2]

    ② [2, 1, 3]  [2, 3, 1]

    ③ [3, 2, 1]  [3, 1, 2]

    代码如下:

    class Solution {
    public:
        vector<vector<int> > permute(vector<int> &num) {
            
            vector<vector<int>> result;
            sort(num.begin(), num.end());
            
            //STL next_permutation
            do{
                result.push_back(num);
            }while(next_permutation(num.begin(), num.end()));
            
            return result;
            
        }
    };
    class Solution {
    public:
        void internalPermute(vector<int> &num, int index, vector<int> &perm, vector<vector<int> > &result) {
            int size = num.size();
            
            if (size == index) {
                result.push_back(perm);
            }
            else {
                for (int i = index; i < size; ++i) {
                    swap(num[index], num[i]);
                    perm.push_back(num[index]);
                    internalPermute(num, index + 1, perm, result);
                    perm.pop_back();
                    swap(num[index], num[i]);
                }
            }
        }
        
        vector<vector<int> > permute(vector<int> &num) {
            vector<vector<int> > result;
            vector<int> perm;
            
            internalPermute(num, 0, perm, result);
            
            return result;
        }
    };
  • 相关阅读:
    MVC新手指南
    BufferedReader方法-----Scanner方法
    sin=in.readLine();
    STL:string 大小(Size)和容量(Capacity)
    2014=9=24 连接数据库2
    2014=9=24 连接数据库1
    常用英语单词
    Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)
    linux 常用快捷键
    启动sh文件注意的问题
  • 原文地址:https://www.cnblogs.com/510602159-Yano/p/4279313.html
Copyright © 2011-2022 走看看