Je suis en train de résoudre ce problème sur leetcode https://leetcode.com/problems/factor-combinations/description/Comment trouver la complexité temporelle des algorithmes de backtracking dfs +?
Les nombres peuvent être considérés comme produit de ses facteurs. Par exemple
8 = 2 x 2 x 2; = 2 x 4.
Ecrivez une fonction qui prend un entier n et renvoie toutes les combinaisons possibles de ses facteurs.
alors que je suis capable d'écrire le code en utilisant l'approche dfs, j'ai du mal à gérer la complexité de son pire temps en termes d'entrée. quelqu'un peut-il aider s'il vous plait?
public List<List<Integer>> getFactors(int n) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
List<Integer> current = new ArrayList<Integer>();
getFactorsHelper(n,2,current,result);
return result;
}
public void getFactorsHelper(int n,int start,List<Integer> current, List<List<Integer>> result){
if(n<=1 && current.size()>1){
result.add(new ArrayList<>(current));
return;
}
for(int i=start;i<=n;i++){
if(n%i==0) {
current.add(i);
getFactorsHelper(n/i,i,current,result);
current.remove(current.size()-1);
}
}
}
complexité du temps par rapport à quelle variable? –
par rapport à l'entrée n – KBR
Ok, mais gardez à l'esprit que ça va être follement fluctuant - par exemple 127 n'a qu'une sortie, alors que 128 a des charges. –