zoukankan      html  css  js  c++  java
  • 【leetcode】Permutations (middle)

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

    求没有重复数字的全排列

    思路:用的标准回溯法,一次AC 

    class Solution {
    public:
        vector<vector<int> > permute(vector<int> &num) {
            vector<vector<int>> ans;
            if(num.empty())
            {
                return ans;
            }
    
            vector<int> X(num.size());
            vector<vector<int>> S(num.size());
            int k = 0;
            S[k] = num;
    
            while(k >= 0)
            {
                while(!S[k].empty())
                {
                    X[k] = S[k].back();
                    S[k].pop_back();
                    if(k < num.size() - 1)
                    {
                        k++;
                        S[k] = num;
                        for(int i = 0; i < k; i++)
                        {
                            vector<int>::iterator  it;
                            if((it = find(S[k].begin(), S[k].end(), X[i])) != S[k].end())
                            {
                                S[k].erase(it);
                            }
                        }
                    }
                    else
                    {
                        ans.push_back(X);
                    }
                }
                k--;
            }
    
            return ans;        
        }
    };

    网上也有用递归的

    class Solution {
    public:
        vector<vector<int> > permute(vector<int> &num) {
            vector<vector<int> > result;
    
            permuteRecursive(num, 0, result);
            return result;
        }
    
        // permute num[begin..end]
        // invariant: num[0..begin-1] have been fixed/permuted
        void permuteRecursive(vector<int> &num, int begin, vector<vector<int> > &result)    {
            if (begin >= num.size()) {
                // one permutation instance
                result.push_back(num);
                return;
            }
    
            for (int i = begin; i < num.size(); i++) {
                swap(num[begin], num[i]);
                permuteRecursive(num, begin + 1, result);
                // reset
                swap(num[begin], num[i]);
            }
        }
    };
  • 相关阅读:
    springboot事物和事物回滚
    MyBatis Sql语句中的转义字符
    使用 vagrant新建Linux虚拟机
    Centos 6.7 安装mongodb
    阿里云windows server 2012 TIME_WAIT CLOSE_WAIT
    使用Eclipse打jar包 包含依赖jar包
    linux crontab定时器
    mysql 存储过程学习笔记
    oracle windows 新建用户授权 导出导入bmp文件
    解决hash冲突的方法
  • 原文地址:https://www.cnblogs.com/dplearning/p/4204473.html
Copyright © 2011-2022 走看看