1. 程式人生 > >46. 全排列(JavaScript)

46. 全排列(JavaScript)

給定一個沒有重複數字的序列,返回其所有可能的全排列。

示例:

輸入: [1,2,3]
輸出:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

思路:

全排列是經典回溯演算法的應用場景,關於回溯演算法的詳細介紹,請自行搜尋。這裡只做簡單介紹。

回溯演算法是一種類似列舉的搜尋嘗試過程,主要在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就”回溯“返回,嘗試別的路徑。

回到這道題,利用回溯演算法的思想就是,先把第一個元素 1 拿出來,將其他的元素求全排列;然後把第二個元素 2 拿出來,其他的元素求全排列;第三個元素亦然。

看得出來,也是要用遞迴的方法。

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permute = function(nums) {
  let matrix = [];
  const subfunc = (arr, temp) => {
    if (arr.length === 0) {
      matrix.push(temp)
    }
    for (let i = 0, len = arr.length; i < len; i++) {
      let newarr = arr.slice(0, i).concat(arr.slice(i + 1))
      subfunc(newarr, temp.concat(arr[i]))
    }
  }
  subfunc(nums, [])
  return matrix;
};

相關推薦

46. 排列JavaScript

給定一個沒有重複數字的序列,返回其所有可能的全排列。 示例: 輸入: [1,2,3] 輸出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 思路: 全排列是經典回溯演算法的應用

LeetCode 46. 排列Permutations

個數 nbsp num 返回 沒有 strong 一個 解題思路 urn 題目描述 給定一個沒有重復數字的序列,返回其所有可能的全排列。 示例: 輸入: [1,2,3] 輸出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1],

[LeetCode]46. 排列The whole arrangement Java

一、題目: LeetCode地址 給定一個沒有重複數字的序列,返回其所有可能的全排列。 示例: 輸入: [1,2,3] 輸出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 二、分析:

LeetCode-46.排列考察點:回溯演算法

給定一個沒有重複數字的序列,返回其所有可能的全排列。 示例: 輸入: [1,2,3] 輸出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 解題思路:這個...感覺很難講明白,

CodeVS 1294 排列dfs

spl pan ref blog mes pac targe amp open 題目: http://codevs.cn/problem/1294/ 代碼(用cout 會超時!!!): #include <iostream> #include<cs

排列STL

c++ namespace using can ext setw spa mes 是不是 輸入一個整數n,輸出1~n的全排列(是不是很水) 在此記錄stl做法 #include<bits/stdc++.h> using namespace std;

【萬能搜尋】萬能DFS之排列——普通演算法

DFS相信大家都很熟悉,下面就給出一種用DFS實現的演算法。 全排列 大家對於全排列是很熟悉的,比如123的全排列就有: 123 132 213 231 312 321 這六種。 現在,我們來設計一個演算法,來

排列dfs

#include <stdio.h> #include <stdlib.h> char data[6] = {'A','B','C','D','E','F'}; char data1[6]; int count=0; bool isSafe(i

深度優先搜尋dfs之1到n的排列收藏

/******** *給你一個數n,輸出1到n的全排列 *深度優先搜尋 ********/#include <stdio.h>#include <stdlib.h>int book[10], a[10], n;  void dfs(int step) 

15. 排列DFS

程式碼:class Solution { public: /* * @param nums: A list of integers. * @return: A list of permutations. */ vector<vector<int>

1- n , n個數的排列dfs

這個模板呢可以應用於許多地方,例如:一串字元的全排列;或者給你一段字元或者數字,然後讓你找到一組或者多組滿足特定要求的 排列;給你一組數, 然後讓你求相鄰兩個數有特定關係的排列:等等許多類似的問題都可以通過下面這個求解n個數的全排列程式碼 來改變,可以都過新增以

字串的排列java

       差不多半個月沒寫部落格了,今天再寫一篇。        字串全排列相信大家都不陌生,對於我來說真的是寫了又忘,忘了又寫,所以決定寫成一篇部落格,廢話不多說下面我來分析問題: 問題描述:給定一個字串寫出它的全排列,例如ab,全排列是ab,ba,而abc的全排列a

排列python

count = 0 def perm(n,begin,end): global count if begin >= end: print(n) count += 1 else: i

輸出一個字串的排列C++

/* 實現方法: 對於一個字串"abc"輸出它的全排列,第一個字元應該分別為a,b,c;第二個字元,後面應該是除去已輸出部分的剩餘部分的全排列。 即對於"abc", 輸出 a,輸出"abc"除去'a'的全排列; 輸出 b,輸出"bc"除去'b'的全排列;

深度優先演算法實現字母排列Java

使用Java實現對任意字母的全排列,例如: 在字母ABC中排列出全部答案。使用一般的for迴圈方法也可以解出題目,這裡面就ABC三個字母,使用for迴圈的話也只不過三個迴圈巢狀罷了,如果是ABCDEF

LeetCode 46. 排列 Permutations C語言

題目描述: 給定一個沒有重複數字的序列,返回其所有可能的全排列。 示例: 輸入: [1,2,3] 輸出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 題目解答: 方法1:回溯 使用

LeetCode-----46.Permutations&&47.Permutations II 排列----回溯法

Given a collection of numbers that might contain duplicates, return all possible unique permutations. For example,[1,1,2] have the foll

排列洛谷1061 Jam的計數法or NOIP 2006 普及組 第三題

div 順序 pre highlight 格式 其中 字符 是個 true Jam是個喜歡標新立異的科學怪人。他不使用阿拉伯數字計數,而是使用小寫英文字母計數,他覺得這樣做,會使世界更加豐富多彩。 在他的計數法中,每個數字的位數都是相同的(使用相同個數的字母),英文字母按

排列 遞歸求解+字典序 java 轉載

解決 nbsp 介紹 轉載 imp dict 問題 描述 clas 問題:給出一個字符串,輸出所有可能的排列。 全排列有多種算法,此處僅介紹常用的兩種:字典序法和遞歸法。 1、字典序法: 如何計算字符串的下一個排列了?來考慮"926520"這個字符串,我們從後向前找第一雙相

習題2.8 輸出排列20 分浙大版《數據結構第2版》題目集

text ble 存在 base scripts html 數據 ext 運行時 請編寫程序輸出前n個正整數的全排列(n<10),並通過9個測試用例(即n從1到9)觀察n逐步增大時程序的運行時間。 輸入格式: 輸入給出正整數n(<10)。 輸出格