《剑指Offer》 P154
面试题28:字符串的排列
题目
解答
#include <string>
#include <iostream>
#include <Windows.h>
using namespace std;
void permutation(string s,int start,int &num)
{
if (start == s.size() - 1)
cout << num++ << '\t' << s << endl;
else
{
for (int i = start; i < s.size(); i++)
{
int temp = s[start];
s[start] = s[i];
s[i] = temp;
permutation(s, start + 1, num);
temp = s[start];
s[start] = s[i];
s[i] = temp;
}
}
}
void permutation(string s)
{
if (s.empty())
return;
int num = 0;
permutation(s, 0, num);
}
void combination(string s, int n, int start, string &rlt,int &num)
{
if (n > s.size() - start)
return;
if (n == 0)
{
cout << num++ << '\t' << rlt << endl;
}
else
{
string rlt1 = rlt;
rlt1 += s[start];
combination(s, n - 1, start + 1, rlt1, num);
combination(s, n, start + 1, rlt, num);
}
}
void combination(string s, int n)
{
if (n > s.size())
return;
string rlt;
int num = 0;
combination(s, n, 0, rlt, num);
}
int main()
{
string s = "123456";
permutation(s);
cout << endl;
combination(s, 3);
system("pause");
}