【LeetCode】46. Permutations

Given a collection of distinct integers, return all possible permutations.

Example:

Input: [1,2,3]
Output:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

给出一串数字,没有重复数字,返回它的所有排列。这道题跟31.Next Permutations的解决方法基本一致。

先将数字从小到大排列,然后将数字从最小序列排到最大序列。

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> r;
        bool flag = true;
        int index = -1;
        sort(nums.begin(),nums.end()); 
        r.push_back(nums);
        while(flag){
            flag = false;
            index = -1;
            for(int i=nums.size()-1;i>=1;i--){
                if(nums[i]>nums[i-1]){
                    flag = true;
                    index = i-1;
                    break;
                }            
            }
            if(index >= 0){
                for(int i=nums.size()-1;i>=index+1;i--){
                    if(nums[i]>nums[index]){
                        swap(nums[i],nums[index]);
                        break;
                    }
                        
                }
                sort(nums.begin()+index+1,nums.end());
                r.push_back(nums);
            }
        }
        
        return r; 
    }
};




猜你喜欢

转载自blog.csdn.net/poulang5786/article/details/80311404