Permutation in C++


unbekannt29
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);
            }
        }
    }
};    

Wie ändere ich es, um alle Permutationen zurückzugeben? Derzeit gibt es nur [[1,2,3]]. Ich weiß, dass es viele Lösungen gibt, aber ich möchte, dass es mithilfe von Vektoren und Rest funktioniert.

sagen

Sie haben nur einen restVektor (und nur einen sofarVektor), weil Sie als Referenz übergeben. Das heißt, wenn Sie ein Element aus entfernen rest, ist es weg. Du legst es nie zurück, also ist es für immer weg. (Tatsächlich entfernen Sie Elemente aus dem Vektor, der als Argument an übergeben wurde permute. Einige würden sagen, dass das Ändern des Arguments ein schlechtes Interface-Design ist.)

Sie möchten wahrscheinlich die Parametervektoren nach Wert übergeben (außer ans, das Ergebnisse akkumuliert und daher dauerhaft geändert werden sollte). Natürlich werden bei der Wertübergabe Kopien erstellt, was eine unnötige quadratische Komplexität mit sich bringt, aber es ermöglicht dem Algorithmus, wie erwartet zu arbeiten.

Verwandte Artikel


Permutation und Kombination in C #

Sikrigagan Bitte sagen Sie mir, wie ich Permutation und Kombination in der C # -Konsolenanwendung anwenden und Werte von N und r nehmen und Permutation und Kombination berechnen kann. Weston Ich habe es nur zum Spaß versucht, es ist tatsächlich eine kleine Her

C-Code-Permutation

user2530773 Hier ist ein Permutationscode, der jedoch nicht alle möglichen Permutationen druckt. Nur gedruckt ist die Eingabe. Was ist los mit diesem Code? #include <stdio.h> #include <string.h> #include <stdlib.h> int bitmask; char* characters; int character

Permutation und Kombination in C ++ finden

Shrinivas Petale Ich möchte eine Reihe von Zahlen dynamischer Länge in C ++ finden. Angenommen, ich habe 2 Gruppen von Zahlen: arr1[3] = {1, 3, 8}und arr2[4] = {2, 9}dann ist die erwartete Ausgabe: '1, 2', '1, 9', '3, 2', '3, 9', '8, 2', '8, 9'. Wenn es jetzt

Generieren der Permutation des Strings in c ++

Ninjakx Dies ist der Code, der mithilfe der Bitmaskierung eine mögliche Permutation generiert. Ich habe Probleme zu verstehen, wie es nach dieser Bedingung ausgeführt wird, wenn i = 2 , bit = 4 , mask = 7. Wann bit is 4und mask is 7so Bedingung (bit & mask) ==

Finden Sie eine versteckte Permutation eines Strings C++

Froooo Ich habe zwei Strings und wollte überprüfen, ob der zweite eine Permutation des ersten ist (und natürlich umgekehrt). Also habe ich auf cplusplus Referenz fand heraus , dass die is_permutation Funktion der Bibliothek Algorithmus mir helfen könnte. Tatsä

Permutation in JavaScript

jhone Hier ist mein Problem: Suchen Sie für einen bestimmten Satz nach Vorkommen des angegebenen Zeichensatzes. Wählen Sie gefilterte Wörter aus und generieren Sie Permutationen. (Satz und Zeichen dürfen nur Großbuchstaben enthalten.) Ausgewählte Wörter und Pe

Permutation in SQL

user5529778 Ich habe das folgende Problem und kann keine Lösung finden (auch nachdem ich viel im Internet gesucht habe). Ich habe eine Tabelle mit Projekten und den zugehörigen Mitarbeitern (ca. 100.000 Einträge): +------------+-------------+ | Project ID |

Unstable permutation

sujithra baskaran Today, I tried to solve this question: A permutation P is called unstable if it keeps changing every second based on the rule below. -Every element of the permutation is changing every second independently following a rule, i.e., after one se