我试图找到一个字符串的所有可能的字谜,并仅使用递归将它们存储在一个数组中。
我卡住了,这就是我的全部。
history
顺序无关紧要。 例如:字符串“abc”; 数组应该有:abc,acb,bca,bac,cab,cba
编辑:我试图找到一个单词的所有排列并将它们插入到数组中而不使用循环。
答案 0 :(得分:0)
您需要在permute()
再次调用permute()
之前存储当前值。这就是你失去一些价值观的地方。
答案 1 :(得分:0)
最简单的方法是:
// Precondition locs size is the same x length and arr is the right size to handle all the permutations
void permute(string arr[], string x, int locs[], int size, int & index)
{
for(int i = 0; i<size; i++)
{
if(locs[i] < size) locs[i]++;
else locs[i] = 0;
}
arr[index] = "";
for(int i = 0; i<size; i++)
{
arr[index] += x[locs[i]];
}
index++;
}
希望这真的有帮助。
答案 2 :(得分:0)
你应该使用string&amp;对于参数,因为它会更有效。你应该遍历字符。
#include <iostream>
#include <string>
using namespace std;
void permute(string* arr, int& ind, string& wrd, int it) {
if (it == wrd.length()) {
arr[ind++] = wrd;
} else {
for (int i = it; i < wrd.length(); ++i) {
swap(wrd[i], wrd[it]);
permute(arr, ind, wrd, it + 1);
swap(wrd[i], wrd[it]);
}
}
}
int main() {
string a = "ABCD";
string arr[100]; // enough size to store all permutations
int ind = 0;
permute(arr,ind, a, 0);
for (int i = 0; i < ind; ++i) {
cout << arr[i] << endl;
}
return 0;
}