问题包括使用 n 位数字中的 k 查找所有排列。我能够找到所有的排列,但我正在努力删除重复项。我可以成功地比较并找到重复项,但擦除它们是我正在努力做的事情。我有一种感觉,我错过了一些简单的东西,但我不知道它是什么。
任何帮助将不胜感激。我已经盯着这个一个星期了。
这是我现在拥有的代码。
void getPermutations(int n, int k)
{
string str = "";
//fill string with numbers <= n
for(int i = 0; i < n; i++)
{
str += to_string(i); //convert numbers to string
}
string tempStr = "";
string outputStr = "";
do {
tempStr = str.substr(0, k);
int compareResult = tempStr.compare(0, k, outputStr, 0, k);
if (compareResult == 0)
{
cout << "| same | ";
outputStr.erase(k,k);
}
outputStr = tempStr;
cout << outputStr << " ";
} while (next_permutation(str.begin(), str.end()));
}
- 我想你的意思是删除tempStr 的内容,而不是输出 Str。
- 擦除的调用并不完全正确。它的第一个参数标记擦除的起始位置,第二个参数告诉要擦除的字符数。所以如果你想擦除整个字符串,第一个参数应该是......
- 您实际上不必擦除任何内容。让它按照自己的方式工作后,请尝试在不擦除的情况下执行此操作!
祝你好运!