首页 > 其他分享 >next_permutation函数

next_permutation函数

时间:2023-05-31 17:35:54浏览次数:30  
标签:last 函数 Iterator next str permutation first


next_permutation的函数声明:#include  <algorithm>

 

bool next_permutation( iterator start, iterator end);


next_permutation函数的返回值是布尔类型,在STL中还有perv_permutation()函数

 

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int main()
{
    string str;
    cin >> str;
    sort(str.begin(),str.end());
    while (next_permutation(str.begin(), str.end()))
        cout << str << endl;
    return 0;
}

next_permutation()函数功能是输出所有比当前排列大的排列,顺序是从小到大。

而prev_permutation()函数功能是输出所有比当前排列小的排列,顺序是从大到小。


next_permutation函数的原理如下:


在当前序列中,从尾端向前寻找两个相邻元素,前一个记为*i,后一个记为*t,并且满足*i < *t。然后再从尾端

寻找另一个元素*j,如果满足*i < *j,即将第i个元素与第j个元素对调,并将第t个元素之后(包括t)的所有元

素颠倒排序,即求出下一个序列了。


代码:


template<class Iterator>
bool next_permutation(Iterator first,Iterator last)
{
    if(first == last)
        return false;
    Iterator i = first;
    ++i;
    if(i == last)
        return false;
    i = last;
    --i;
    while(1)
    {
        Iterator t = i;
        --i;
        if(*i < *t)
        {
            Iterator j = last;
            while(!(*i < *--j));
            iter_swap(i,j);
            reverse(t,last);
            return true;
        }
        if(i == first)
        {
            reverse(first,last);
            return false;
        }
    }
}




标签:last,函数,Iterator,next,str,permutation,first
From: https://blog.51cto.com/u_16146153/6388610

相关文章

  • php随机颜色函数
    在PHP中,可以通过生成随机数的方法来实现随机颜色函数。随机颜色函数可以用于创建动态的背景、文本和图像等元素,为网站或应用程序增加视觉效果。以下是一个用于生成随机颜色的示例代码:functionrandomColor(){$r=mt_rand(0,255);//生成红色分量$g=mt_rand(0,2......
  • Python基础之函数的参数以及名称空间
    函数的参数形式参数什么是形式参数:在'函数定义阶段'括号内依次写入的变量名就叫形式参数,简称"形参" defindex(a,b,c,d,e):pass#a,b就称之为是函数的形参1、位置形参位置形参 在函数'定义阶段'括号内从'左往右依次'写入的'变量名'就是位置形参......
  • 快速排序 分区函数
    适合我的快排分区函数:defpatition2(arr,l,r):pivot=arr[l]index=l+1foriinrange(l+1,r+1):ifarr[i]<pivot:arr[i],arr[index]=arr[index],arr[i]index+=1arr[l],arr[index-1]=arr[index-1],arr[l]......
  • 概率生成函数
    概率生成函数认识概率生成函数,形如\[f(x)=\sum_{i=0}^{+\infty}P(X=i)x^i\]也就是 i 次项的系数是随机变量 X 等于 i 的概率。这个东西有两个用处:1关于概率\(f(1)=1\)其实就是把 \(f(x)\) 的所有系数加起来,而这里的系数就是概率2关于期望想一想,上面的......
  • UE4中的蓝图函数库
    #蓝图函数库此文为AssertionsBlueprintFunctionLibraries(opensnewwindow)的原创翻译,本文内容版权归原文所有,仅供学习,如需转载望注本文地址,翻译不易,谢谢理解我们在开发中经常发现需要一系列工具函数来让开发更简单。这些函数经常是无状态的,并且在各种gameplay框架代码中......
  • 编译器绕过拷贝构造函数和返回值优化
    写在前面:在拷贝初始化(也就是用等号初始化,注意使用拷贝构造函数创建一个新的对象不属于拷贝初始化)过程中,编译器可以(但不是必须)跳过拷贝构造函数或者移动构造函数,直接创建对象。1stringnull_book="999";2//可以改写为3stringnull_book("999");这里面”999“隐式的转换为......
  • 实现memcpy()函数过程总结
    1.按字节实现1)初步版本void*my_memcpy(void*dst,constvoid*src,intn){if(dst==NULL&&src==NULL&&n<=0)returnNULL;char*s=(char*)src;char*d=(char*)dst;while(n--){*d++=*s++;}returnd......
  • 欧拉函数与容斥
    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:给定五个数,其中有和,求满足条件的有序对的个数。题目中    明确说在所有的输入中。分析:问题可以转化为和时,的有序对的个数。那么先比较和的    大小,相同的部分可以用欧拉函数的累加计算,没有公共的部分用容斥计算......
  • 关于C++字符串的一些函数
    其实印象里,c的char用法反倒比c++的string深一点,可能是因为我对string的运用太少了吧。 提到C++的string,就得先提一下首先提一下C的char类型,毕竟C++是根据C延展过来的,继承了C的特性,而且C本身是没有string这个东西的。 char是什么?一个关键字,用于声明一个变量是字符类型。好吧,......
  • Python 函数
    函数返回多个返回值defmultiple_return_value():importdatetimed=datetime.date.today()val_1='年份为:{}'.format(d.year)val_2='月份为:{}'.format(d.month)returnval_1,val_2#只需在return关键字后跟多个值(依次用逗号分隔)val=mult......