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;
        }
    };
  • 相关阅读:
    Swift
    iOS 拨打电话
    UI控件问题和XCode编译警告和错误解决方法集锦 (持续更新ing)
    让UIWebView弹出键盘上的按钮显示中文 (附效果图)
    启动app时全屏显示Default.png (附效果图)
    三种数据存储 (plist,NSUserDefaults存储,NSKeyedArchiver存模型方法)
    生成圆形头像 (附效果图)
    循环按钮,并且选中 (附效果图)
    leetcode 字符串分割对称
    leetcode merge-sorted-array/
  • 原文地址:https://www.cnblogs.com/510602159-Yano/p/4279313.html
Copyright © 2011-2022 走看看