题解 | #全排列#(c++)

全排列

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

根据其他题解(csyfZhang中)所改,将str[s:t]的全排列转化为以s[i]开头 s[s+1:t]的全排列

#include<algorithm>
#include<string>

using namespace std;

void pailie(string &str, int s, int t) {
    if (s == t){ 
		cout << str << endl;
		return; 
	}
    for (int i = s; i <= t; i++) {
        swap(str[s], str[i]);  // 交换,即分别以后面的某个字母打头
		string temp = str;  // 为了能换回来先存一下
        sort(str.begin()+s+1, str.end());  // 为了保证题目要求的顺序
        pailie(str, s + 1, t); // 将str[s:t]的全排列转化为以s[i]开头 s[s+1:t]的全排列
        // 换回来,给循环中以别的字母开头的字符串用(下一个循环用)
		str = temp;
    }
}

int main(){
	string str;
	while(getline(cin, str))
		pailie(str, 0, str.size()-1);

	return 0;
}
全部评论

相关推荐

一颗宏心:华为HR晚上过了十二点后还给我法消息。
点赞 评论 收藏
分享
10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务