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

给定一个没有重复数字的序列,返回其所有可能的全排列。

示例:

输入: [1,2,3]
输出:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

思路:排列组合,以及求所有可能解这一类题目都可以用dfs或者bfs。此题用dfs。具体解释可以 参考这里

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> res;
        dfs(nums,0,res);
        return res;
    }
    void dfs(vector<int>& nums,int start,vector<vector<int>> & res)
    {
        if(start>=nums.size()) res.push_back(nums);
        for(int i=start;i<nums.size();++i)
        {
            swap(nums[i],nums[start]);
            dfs(nums,start+1,res);
            swap(nums[i],nums[start]);
        }
    }
};
class Solution:
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        def dfs(nums,start,res):
            if start>=len(nums):
                res.append(nums+[])
            for i in range(start,len(nums)):
                nums[start],nums[i] = nums[i],nums[start]
                dfs(nums,start+1,res)
                nums[start],nums[i] = nums[i],nums[start]
        res=[]
        dfs(nums,0,res)
        return res

猜你喜欢

转载自blog.csdn.net/qq_21997625/article/details/86093736
今日推荐