在使用C++中的next_permutation
函數生成排列時,可以通過在循環中添加判斷條件來避免重復結果。可以將生成的排列存儲在一個集合中,每次生成一個新的排列時,先判斷該排列是否已經存在于集合中,如果已經存在,則繼續生成下一個排列,直到生成一個不重復的排列為止。
以下是一個示例代碼:
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
int main() {
std::vector<int> nums = {1, 2, 2, 3};
std::sort(nums.begin(), nums.end());
std::set<std::vector<int>> result_set;
do {
if (result_set.find(nums) == result_set.end()) {
result_set.insert(nums);
for (int num : nums) {
std::cout << num << " ";
}
std::cout << std::endl;
}
} while (std::next_permutation(nums.begin(), nums.end()));
return 0;
}
在上面的示例中,我們首先將輸入數組nums
排序,然后使用next_permutation
函數生成排列,并將每個排列存儲在result_set
中。在每次生成一個新的排列時,我們先判斷該排列是否已經存在于result_set
中,如果不存在,則輸出該排列并將其插入到result_set
中。這樣就可以避免生成重復的排列結果。