gpt4 book ai didi

c++ - 为什么 next_permutation 会跳过一些排列?

转载 作者:IT老高 更新时间:2023-10-28 22:06:32 24 4
gpt4 key购买 nike

为什么这个简单的函数不输出输入的 5 个字母字符串的所有排列?我认为应该有 120,它只输出 90。

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;

// Creates permutation lists for strings
vector<string> createdcombos2(string letters)
{
vector<string> lettercombos;

cout << "Letters are: " << letters << endl; //input string

do
lettercombos.push_back(letters);
while(next_permutation(letters.begin(), letters.end()));

cout <<"Letter combos: " << endl; //print out permutations
for (auto i : lettercombos)
cout << i << endl;
cout << endl << lettercombos.size() << endl; //number of permutations

return lettercombos;
}


int main()
{
string letters = "gnary";
vector<string> lettercombos;

lettercombos = createdcombos2(letters);
}

最佳答案

要返回循环中的所有排列直到 next_permutation 返回 false,必须在循环开始之前对 vector 进行排序。 next_permutation按升序返回排列。因此,如果您从未排序的 vector 开始,它将在一系列排列中开始。

std::sort(letters.begin(), letters.end());
do
lettercombos.push_back(letters);
while(next_permutation(letters.begin(), letters.end()));

关于c++ - 为什么 next_permutation 会跳过一些排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31258426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com