/** * @param {number[]} nums * @return {number[][]} * http://leetcode.cn/problems/permutations/?envType=study-plan-v2&envId=top-interview-150 */ const permute = function (nums) { }; /* 利用回溯算法,递归的处理,每一次都从头开始遍历,收集每一个元素,由于是全排列,不能再结果中收集同一个元素 多次,所以定义一个used数组来标记是否已经收集,如果收集过就跳过处理下一个元素,如果path的长度和全排列的长度 一致,就将结果收集到result中,最后返回result */ function f2(nums) { /** * * @param {Number[]} nums 所有元素 * @param {Boolean[]} used 对应位置的元素是否被使用过 * @param {Number[]} path 全排列的结果 */ const backtrack = (nums, used, path) { // 如果path的长度和nums的长度一致,收集结果 if(path.length === nums.length){ result.push(path) return } // 递归处理 for(let i = 0; i