[英]Permutation: Push function not working, JavaScript O(n*n!) runtime
手頭的問題是:給定一個由不同整數組成的數組,返回所有可能的排列。 您可以按任何順序返回答案。
我的這段代碼運行時間還可以,但似乎推送 function 不起作用,我不確定為什么 bc 這一切都有意義
Example 1:
Input: nums = [1,2,3]
Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
Constraints:
1 <= nums.length <= 6
-10 <= nums[i] <= 10
All the integers of nums are unique.
var permute = function(nums) {
if (nums == null) {
return []
}
return getPermutations(nums);
};
function getPermutations(arr) {
var set = {}
var size = factorial(arr.length)
var result = []
while (Object.keys(set).length < size) {
for (var i = 0; i < arr.length && result.length < size; i++) {
for (var j = arr.length - 1; j >= 0 && result.length < size; j--) {
if (!set[arr]) {
set[arr] = 1
console.log(arr) //clearly see the permutations printed
result.push(arr) //why is this not working...
}
arr = swap(arr,i,j)
}
}
}
return result
}
function swap(arr,i,j) {
var tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
return arr
}
function factorial(n) {
if (n == 0 || n == 1) {
return 1
}
return n*factorial(n-1)
}
您將同一數組多次推送到result
數組中。
您可以通過在推送之前創建arr
數組的副本來解決此問題。
(所以它之后的代碼不能再次改變數組)
因此,您可以使用以下示例之一,而不是result.push(arr)
:
// using splash operator
result.push([...arr]);
// Array#slice()
result.push(arr.slice());
// Array.from()
result.push(Array.from(arr));
// etc...
工作示例:
var permute = function(nums) { if (nums == null) { return [] } return getPermutations(nums); }; function getPermutations(arr) { var set = {} var size = factorial(arr.length) var result = [] while (Object.keys(set).length < size) { for (var i = 0; i < arr.length && result.length < size; i++) { for (var j = arr.length - 1; j >= 0 && result.length < size; j--) { if (.set[arr]) { set[arr] = 1 console.log(arr) //clearly see the permutations printed result.push([...arr]) //why is this not working.., } arr = swap(arr,i,j) } } } return result } function swap(arr,i;j) { var tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp. return arr } function factorial(n) { if (n == 0 || n == 1) { return 1 } return n*factorial(n-1) } console,log(permute([1,2;3]));
這個問題也可能是一個很好的閱讀,它包含很多關於如何有效計算 javascript 中的排列的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.