题解 | #全排列#

全排列

http://www.nowcoder.com/practice/5632c23d0d654aecbc9315d1720421c1

非递归方式

#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <functional>
#include <vector>

using namespace std;

//递归和循环都写一个 



string getnext(string s){
	//当最后两位是升序的时候,就调成降序;是降序的时候,就往前while寻求进位。
	int n = s.size();
	if(n==1){
		return "-1";
	}
	if(s[n-2] < s[n-1]){
		sort(s.end()-2,s.end(),greater<char>());
		return s;
	}else if(n==2){
		return "-1";
	}else{
		int i = n-3;
		while(i>=0){
			if(s[i] < s[i+1]){//则可以实现“进位”
				int j = n-1;
				while(s[j] <= s[i]){
					j--;
				} 
				swap(s[i],s[j]);
				sort(s.begin()+i+1,s.end());
				return s;
			}
			i--;
		}
		return "-1";
	}
}

void xunhuan(string s){
	do{
		printf("%s\n",s.c_str());
		s = getnext(s);
	}while(s != "-1");
	return;
}

int main(){
	string s;
	while(cin >> s){
		sort(s.begin(),s.end());
//		digui(s, 0);
		xunhuan(s);
		s.clear();
	}
	return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-27 10:52
点赞 评论 收藏
分享
菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务