zoukankan      html  css  js  c++  java
  • 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]
    ]

    AC code:

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

    Runtime: 12 ms, faster than 42.11% of C++ online submissions for Permutations.


    2021-05-05

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

    示例:

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

    思路:回溯法,用到了两个辅助空间,比较容易理解。之前的解法确实很厉害,直接利用交换变量的方法来求解,然后再回溯,不太容易想得到。

    Code:

    class Solution {
    private:
        vector<vector<int> > ans;
        int len;
    public:
        void DFS(vector<int>& nums, vector<bool>& visited, vector<int>& temp, int count) {
            if (count == len) {
                ans.push_back(temp);
                return;
            }
            for (int i = 0; i < len; ++i) {
                if (!visited[i]) {
                    visited[i] = true;
                    temp[count] = nums[i];
                    DFS(nums, visited, temp, count+1);
                    // 回溯
                    visited[i] = false;
                }
            }
        }
    
        vector<vector<int>> permute(vector<int>& nums) {
            len = nums.size();
            vector<bool> visited(len+1, false);
            vector<int> temp(len);
            DFS(nums, visited, temp, 0);
            return ans;
        }
    };    
    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    Navicat Premium 最新激活码 12 免安装(不用注册码,不用注册机)
    Vs Code 2019软件安装教程及常用的入门设置
    (WinForm)FormBorderStyle属性
    背包的题后总结。
    123
    网络最大流——最高标号预流推进
    厉害的网站
    一般图最大匹配——带花树
    四边形不等式
    你好,OI
  • 原文地址:https://www.cnblogs.com/h-hkai/p/9803222.html
Copyright © 2011-2022 走看看