天天看點

Permutations 排列的生成, 遞歸

題目:

連結

解答:

采用遞歸,每次第一個元素和後面的元素進行交換,然後生成除第一個元素以外的後面的排列。

代碼:

class Solution {
  public:
	  vector<vector<int> > permute(vector<int> &num) {
		  int size = num.size();
		  vector<vector<int> >  res;
		  per(num, res, 0);
		  return res;
	  }
  private:
	  void per(vector<int> &num, vector<vector<int> > &res, int k)
	  {
		  if (k == num.size())
		  {
			  res.push_back(num);
		  }
		  for (int i = k; i < num.size(); i++)
		  {
			  swap(num[k], num[i]);
			  per(num, res, k + 1);
			  swap(num[k], num[i]);
		  }
	  }
	  void swap(int &a, int &b)
	  {
		  int temp;
		  temp = a;
		  a = b;
		  b = temp;
	  }
  };