說到排列扭勉,肯定先想到生成排列贿讹,這一節(jié)講如何按照字典序法生成數(shù)字的全排列或者某一排列的下一排列。
原理如上伐谈,給個題目如何烂完?
題目傳送門
題意很簡單,代碼如下:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
string s;
while(cin>>s)
{
if(s[0]=='#')
break;
int key=-1;
int len=s.length();
for(int i=len-1;i>0;i--)
{
if(s[i]>s[i-1]) //這里找到最后一組升序?qū)? {
key=i-1;
break;
}
}
if(key==-1)
{
cout<<"No Successor"<<endl; //如果沒找到的話說明已經(jīng)是最后一個排列了
continue;
}
else
{
for(int i=len-1;i>key;i--)
{
if(s[i]>s[key]) //按照原理找到最后一個大于s[i]的數(shù)
{
//cout<<i<<" "<<key<<endl;
char c=s[i];
s[i]=s[key];
s[key]=c;
break;
}
}
char ch[1000];
for(int i=key+1;i<len;i++)
ch[i]=s[i];
for(int i=key+1;i<len;i++)
s[i]=ch[len-i+key];
cout<<s<<endl;
}
}
return 0;
}