[Leetcode]#46 Permutations

来源:互联网 发布:nginx根据url跳转 编辑:程序博客网 时间:2024/05/17 11:34

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

//#46 Permutations//20ms 28.12%class Solution {public:    int getFactorial(int n)    {        if(n==1 || n==0) return 1;        else return n*getFactorial(n-1);    }    vector<int> permuteOne(vector<int> n, int k)    {        vector<int> result;        vector<int> nums(n.size(), 0);        for(unsigned int i=0; i<n.size(); i++)        {            nums[i] = n[i];        }        for(unsigned int i=0; i<n.size(); i++)        //determine the corresponding item one by one        {            //cout << "Current session is " << n-i << endl;            //cout << "k = " << k << endl;            int insert_num = (k-1) / getFactorial(n.size()-i-1);            //cout << "insert_num = " << insert_num << endl;            if(insert_num > 0)            {                result.push_back(nums[insert_num]);                //cout << "inserting " << nums[insert_num] << " into string\n";                nums.erase(nums.begin()+insert_num);                k = k - insert_num * getFactorial(n.size()-i-1);            }            else            {                result.push_back(nums[0]);                nums.erase(nums.begin());            }        }        return result;    }    vector< vector<int> > permute(vector<int>& nums)     {        vector< vector<int> > result;        int n = getFactorial(nums.size());        for(int i=0; i<n; i++)        {            vector<int> v = permuteOne(nums, i+1);            result.push_back(v);        }        return result;    }};
0 0
原创粉丝点击