簡體   English   中英

C++ 中的排列

[英]permutation in C++

class Solution {
public:
     vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int> > result;
        vector<int> sofar;
        permutehelper(nums, sofar, result);
        return result;
    }
    
    void permutehelper(vector<int> &rest, vector<int> &sofar, vector<vector<int>> &ans){
                
        if(rest.size() == 0) {
            ans.push_back(sofar);
        }
        else{
            for(int i = 0; i < rest.size(); i++){
                sofar.push_back(rest[i]);
                rest.erase(rest.begin() + i);
                permutehelper(rest, sofar, ans);
            }
        }
    }
};    

我如何修改它以返回所有排列,目前它只給出 [[1,2,3]]。 我知道有很多解決方案,但我想使用向量 sofar 和 rest 使其工作。

您只有一個rest向量(並且只有一個sofar向量),因為您是通過引用傳遞的。 這意味着當您從rest中刪除一個元素時,它就消失了。 你永遠不會把它放回去,所以它永遠消失了。 (實際上,您正在從作為參數傳遞給permute的向量中刪除元素。有人會說修改參數是糟糕的界面設計。)

您可能希望按值傳遞參數向量( ans除外,它會累積結果,因此應該永久修改)。 當然,按值傳遞會生成副本,這會引入不必要的二次復雜度,但它會讓算法按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM