Permutations

Description:

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

 

思路分析:

求一组数据a1,a2,..., an的全排列可按如下步骤求解:

1.求出a2,a3,...an的全排列{P1,P2, ... ,Pj};

2. 将a1插入进去,得到新的全排列{a1P1, a1P2,..., a1Pj};

3. 交换a1和ai(1<i<=n),重复执行上述1,2两步,再交换a1和ai,即可得到所有的排列组合。

 

Code:

1   //定义一个接口函数

2   vector<vector<int>> permute(vector<int>& nums) {

3      return permute(nums, 0, nums.size()-1);

4     }
 1 vector<vector<int>> permute(vector<int>& nums,int lIndex, int rIndex)

 2     {

 3         if (lIndex <= rIndex)

 4         {

 5             vector< vector<int> >result, tempResult;

 6             vector<int>temp;

 7         

 8             if (lIndex == rIndex)

 9             {

10                 temp.push_back(nums[lIndex]);

11                 result.push_back(temp);

12                 return result;

13             }

14             else

15             {

16                 for (int i = lIndex; i <= rIndex; ++i)

17                 {

18                     if (i != lIndex)

19                     {//注意当i和lIndex相等时,一个数将和它本身异或,则结果一定为0

20                         nums[i]^=nums[lIndex];

21                         nums[lIndex]^=nums[i];

22                         nums[i]^=nums[lIndex];

23                     }

24                     tempResult = permute(nums, lIndex+1, rIndex);

25                    

26                     for (int j = 0; j < tempResult.size(); ++j)

27                     {

28                         tempResult[j].insert(tempResult[j].begin(),nums[lIndex]);

29                         result.push_back(tempResult[j]);

30                     }

31                     //将两个元素交换回来

32                     if (i != lIndex)

33                     {

34                         nums[i]^=nums[lIndex];

35                         nums[lIndex]^=nums[i];

36                         nums[i]^=nums[lIndex];

37                     }

38                 }

39                 return result;

40             }

41         }

42     }

 

你可能感兴趣的:(IO)