一、题目
给定任意一个一维数组,编写一个程序返回一个二维数组,该二维数组中所有的一维数组是给定一维数组打乱顺序后重新构成的(包含给定数组本身)。例如:[1,2,3] ==> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,2,1],[3,1,2]]。要求:使用递归完成。
二、分析
基本情况:如果数组为空或只有一个元素,则其排列只有一种可能,就是它本身。
递归步骤:
- 对于数组中的每个元素,我们可以将其视为排列的起始元素。
- 剩余的元素可以递归地排列。
- 将当前元素与剩余元素的每个排列组合,形成一个完整的排列。
交换顺序:
- 可以通过在原数组上交换元素的位置来生成排列。
- 递归地固定每个位置的元素,然后对剩下的子数组进行排列。
三、代码实现
定义一个函数 getPermutations(arr) 用于计算输入数组 arr 的所有排列(即所有可能的顺序组合)。例如:
function getPermutations(arr) {
let result = [];
function callback(current, remaining) {