zoukankan      html  css  js  c++  java
  • leetcode4:Permutation

    #include <utility>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    //the next permutation
    template<class BidirIt>
    bool STL_next_permutation(BidirIt first, BidirIt last)
    {
        if (first == last) return false;
        BidirIt i = last;
        if (first == --i) return false;
     
        while (1) {
            BidirIt i1, i2;
     
            i1 = i;
            --i;
            if (*i < *i1) {
                i2 = last;
                while (!(*i < *--i2))
                    ;
                std::iter_swap(i, i2);
                std::reverse(i1, last);
                return true;
            }
            if (i == first) {
                std::reverse(first, last);
                return false;
            }
        }
    }
    void nextPermutation(int A[],int len)
    {
        STL_next_permutation(A, A+len);
    }
    
    
    //full pemutation
    void fullPerm(int A[],int m,int n)
    {
        if(m == n)
        {
            for(int i=0;i<n+1;i++)
                std::cout << A[i] << " ";
            std::cout << std::endl;
            return;
        }
        else
        {
            for(int i=m;i<n+1;i++)
            {
                std::swap(A[m], A[i]);
                fullPerm(A,m+1,n);
                std::swap(A[m], A[i]);
            }
        }
    }
    
    
    int Factorial(int n)
    {
        int fac=1;
        for(int i=1;i<=n;i++)
        {
            fac *=i;
        }
        return fac;
    }
    //康托编码第k个序列
    void CantorCode(int A[],int len,int k)
    {
        --k;
        std::vector<std::pair<int,bool>> v;
        for(int i=0;i<len;i++)
        {
            v.emplace_back(A[i],false);
        }
    
        for(int i=0;i<len;i++)
        {
            int j;
            int t=k/Factorial(len-i-1);
            for(j=0;j<len;j++)
            {
                if(!v[j].second)
                {
                    if(t==0) break;
                    --t;    
                }    
            }
            A[i]=v[j].first;
            v[j].second=true;
            k=k%Factorial(len-i-1);
        }
    }
  • 相关阅读:
    聊聊Spark的分区、并行度 —— 前奏篇
    深入探讨HBASE
    分布式流平台Kafka
    GeoServer中使用SLD样式
    OpenLayer修改WFS中的要素
    leaflet加载GeoServer的WFS服务
    OL实现属性查询的功能
    OL3实现空间查询的代码示例
    WFS—GetFeature方法
    OpenLayer+Geoserver+postgis实现路径分析
  • 原文地址:https://www.cnblogs.com/wxquare/p/4823585.html
Copyright © 2011-2022 走看看