Permutations of an integer array containing distinct numbers












-1












$begingroup$


What's the time complexity of my code? I ran this through www.leetcode.com and it's optimal. I think it's $O(n cdot n!)$. First I thought it was $O(n^2 cdot n!)$ because of the extra $n$ since we make $n$ recursive calls. However, only the first call to permute() is dominant, and kind of dwarfs the rest since $n!$ is >>> $(n-1)!$.



class Solution {
public List<List<Integer>> permute(int nums) {
return permute(nums, nums.length - 1);
}

private List<List<Integer>> permute(int nums, int n) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if(n < 0) {
List<Integer> permutation = new ArrayList<Integer>();
result.add(permutation);
return result;
}

// below returns (n-1)! results of size n-1 each
List<List<Integer>> prefixes = permute(nums, n-1);
for(List<Integer> prefix : prefixes) {
List<List<Integer>> permutations = insert(nums[n], prefix);
result.addAll(permutations);
}
return result;
}

// O(n^2) worst case when size of list is n-1
private List<List<Integer>> insert(int num, List<Integer> list) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
for(int i = 0; i <= list.size(); i++) {
List<Integer> clone = new ArrayList<Integer>();
clone.addAll(list);
clone.add(i, num);
result.add(clone);
}
return result;
}

}









share|improve this question









New contributor




Aran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$












  • $begingroup$
    Requests to analyze the complexity of code are off topic here.
    $endgroup$
    – esote
    11 mins ago
















-1












$begingroup$


What's the time complexity of my code? I ran this through www.leetcode.com and it's optimal. I think it's $O(n cdot n!)$. First I thought it was $O(n^2 cdot n!)$ because of the extra $n$ since we make $n$ recursive calls. However, only the first call to permute() is dominant, and kind of dwarfs the rest since $n!$ is >>> $(n-1)!$.



class Solution {
public List<List<Integer>> permute(int nums) {
return permute(nums, nums.length - 1);
}

private List<List<Integer>> permute(int nums, int n) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if(n < 0) {
List<Integer> permutation = new ArrayList<Integer>();
result.add(permutation);
return result;
}

// below returns (n-1)! results of size n-1 each
List<List<Integer>> prefixes = permute(nums, n-1);
for(List<Integer> prefix : prefixes) {
List<List<Integer>> permutations = insert(nums[n], prefix);
result.addAll(permutations);
}
return result;
}

// O(n^2) worst case when size of list is n-1
private List<List<Integer>> insert(int num, List<Integer> list) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
for(int i = 0; i <= list.size(); i++) {
List<Integer> clone = new ArrayList<Integer>();
clone.addAll(list);
clone.add(i, num);
result.add(clone);
}
return result;
}

}









share|improve this question









New contributor




Aran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$












  • $begingroup$
    Requests to analyze the complexity of code are off topic here.
    $endgroup$
    – esote
    11 mins ago














-1












-1








-1





$begingroup$


What's the time complexity of my code? I ran this through www.leetcode.com and it's optimal. I think it's $O(n cdot n!)$. First I thought it was $O(n^2 cdot n!)$ because of the extra $n$ since we make $n$ recursive calls. However, only the first call to permute() is dominant, and kind of dwarfs the rest since $n!$ is >>> $(n-1)!$.



class Solution {
public List<List<Integer>> permute(int nums) {
return permute(nums, nums.length - 1);
}

private List<List<Integer>> permute(int nums, int n) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if(n < 0) {
List<Integer> permutation = new ArrayList<Integer>();
result.add(permutation);
return result;
}

// below returns (n-1)! results of size n-1 each
List<List<Integer>> prefixes = permute(nums, n-1);
for(List<Integer> prefix : prefixes) {
List<List<Integer>> permutations = insert(nums[n], prefix);
result.addAll(permutations);
}
return result;
}

// O(n^2) worst case when size of list is n-1
private List<List<Integer>> insert(int num, List<Integer> list) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
for(int i = 0; i <= list.size(); i++) {
List<Integer> clone = new ArrayList<Integer>();
clone.addAll(list);
clone.add(i, num);
result.add(clone);
}
return result;
}

}









share|improve this question









New contributor




Aran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$




What's the time complexity of my code? I ran this through www.leetcode.com and it's optimal. I think it's $O(n cdot n!)$. First I thought it was $O(n^2 cdot n!)$ because of the extra $n$ since we make $n$ recursive calls. However, only the first call to permute() is dominant, and kind of dwarfs the rest since $n!$ is >>> $(n-1)!$.



class Solution {
public List<List<Integer>> permute(int nums) {
return permute(nums, nums.length - 1);
}

private List<List<Integer>> permute(int nums, int n) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if(n < 0) {
List<Integer> permutation = new ArrayList<Integer>();
result.add(permutation);
return result;
}

// below returns (n-1)! results of size n-1 each
List<List<Integer>> prefixes = permute(nums, n-1);
for(List<Integer> prefix : prefixes) {
List<List<Integer>> permutations = insert(nums[n], prefix);
result.addAll(permutations);
}
return result;
}

// O(n^2) worst case when size of list is n-1
private List<List<Integer>> insert(int num, List<Integer> list) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
for(int i = 0; i <= list.size(); i++) {
List<Integer> clone = new ArrayList<Integer>();
clone.addAll(list);
clone.add(i, num);
result.add(clone);
}
return result;
}

}






java algorithm array recursion combinatorics






share|improve this question









New contributor




Aran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




Aran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 10 mins ago









Jamal

30.3k11117227




30.3k11117227






New contributor




Aran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 45 mins ago









AranAran

1




1




New contributor




Aran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Aran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Aran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • $begingroup$
    Requests to analyze the complexity of code are off topic here.
    $endgroup$
    – esote
    11 mins ago


















  • $begingroup$
    Requests to analyze the complexity of code are off topic here.
    $endgroup$
    – esote
    11 mins ago
















$begingroup$
Requests to analyze the complexity of code are off topic here.
$endgroup$
– esote
11 mins ago




$begingroup$
Requests to analyze the complexity of code are off topic here.
$endgroup$
– esote
11 mins ago










0






active

oldest

votes











Your Answer





StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");

StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});






Aran is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f212953%2fpermutations-of-an-integer-array-containing-distinct-numbers%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes








Aran is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















Aran is a new contributor. Be nice, and check out our Code of Conduct.













Aran is a new contributor. Be nice, and check out our Code of Conduct.












Aran is a new contributor. Be nice, and check out our Code of Conduct.
















Thanks for contributing an answer to Code Review Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


Use MathJax to format equations. MathJax reference.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f212953%2fpermutations-of-an-integer-array-containing-distinct-numbers%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

How to make a Squid Proxy server?

Is this a new Fibonacci Identity?

19世紀