LeetCode#46 Permutation

題意:

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]
]
這道題目題意比較清楚,就是寫一個全排列,可以用遞歸的方法來實現,要實現n個數的全排列,也就是當實現n-1個數的排列,再這樣逐層遞歸下去。
這時可以採用這用一種策略,先固定第一個數,實現後n-1個數的排列,然後再不斷地將後面的數和第一個數交換,最後即可實現全排列。
舉個實例實現三個數的全排列,先固定第一個數1,實現後面兩個數的排列,再將2和1交換,再實現後面兩個數的排列,最後再講3放到首位,再實現後面兩個數的排列
接下來是一種c++的實現
#include<iostream>
#include<vector>

using namespace std;
class Solution {
public:
    vector<vector <int> > permute(vector<int>& nums) {
        vector<vector<int> > v;
        int n = 0;
        Permutation(nums,v,n);
        return v;
    }
    void Permutation(vector<int>& nums, vector<vector<int> > &v, int n) {
    	if(n == nums.size()) {
    		v.push_back(nums);
		} else {
			for(int i = n; i < nums.size(); i++) {
				swap(nums[i],nums[n]);
				Permutation(nums,v,n+1);
				swap(nums[i],nums[n]);
			}
		}
	}
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章