根据您提供的代码,我注意到其中可能存在一个问题。在backtrace函数中,当递归回溯时,应该传递更新后的unordered_map和path,而不是原始的map和path。
以下是修正后的代码示例:
class Solution {
public:
std::unordered_map<int, int> Map;
vector<vector<int>> result;
void backtrace(int epoch, int total, std::unordered_map<int, int> map, vector<int> path) {
if (epoch > total) {
result.push_back(path);
return;
}
for (auto it = map.begin(); it != map.end(); it++) {
if (it->second > 0) {
path.push_back(it->first);
it->second--;
backtrace(epoch + 1, total, map, path); // 此处应为map而非Map
path.pop_back();
it->second++; // 恢复被减少的计数
} else {
continue;
}
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
for (int i = 0; i < nums.size(); i++) {
Map[nums[i]]++;
}
backtrace(1, nums.size(), Map, vector<int>{});
return result;
}
};
修正后的代码会正确处理重复元素并生成唯一排列组合。
内容由零声教学AI助手提供,问题来源于学员提问




