题目描述:
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
算法实现:
JavaScript
/**
* @param {number[]} nums
* @return {number[][]}
*/
var permute = function(nums) {
var len = nums.length
return perm(len - 1)
function perm(i) {
if (i === 0) {
return [[nums[0]]]
}
var ans1 = perm(i - 1)
var size = ans1.length
var ans2 = []
var fixNum = nums[i]
for (var k = 0; k < size; k++ ) {
for (var l = 0; l <= i; l++ ) {
var arr = ans1[k].slice()
arr.splice(l, 0, fixNum)
ans2.push(arr)
}
}
return ans2
}
};
思考:
考察递归的运用,这方面在前端领域应用不多,先前的想法是通过循环的嵌套来实现,没有成功解出,之后了解了一下回溯法,通过借鉴别人的代码完成了这道题。
总结:
虽然通过率很高,难度中等,但是我感觉这道题是我到目前为止做过最难的一道题,感觉仅仅依靠自己思考,根本想不出来这种方法,还是需要继续努力。