题目描述:

给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:

  1. 输入: [1,2,3]
  2. 输出:
  3. [
  4. [1,2,3],
  5. [1,3,2],
  6. [2,1,3],
  7. [2,3,1],
  8. [3,1,2],
  9. [3,2,1]
  10. ]

算法实现:

JavaScript

  1. /**
  2. * @param {number[]} nums
  3. * @return {number[][]}
  4. */
  5. var permute = function(nums) {
  6. var len = nums.length
  7. return perm(len - 1)
  8. function perm(i) {
  9. if (i === 0) {
  10. return [[nums[0]]]
  11. }
  12. var ans1 = perm(i - 1)
  13. var size = ans1.length
  14. var ans2 = []
  15. var fixNum = nums[i]
  16. for (var k = 0; k < size; k++ ) {
  17. for (var l = 0; l <= i; l++ ) {
  18. var arr = ans1[k].slice()
  19. arr.splice(l, 0, fixNum)
  20. ans2.push(arr)
  21. }
  22. }
  23. return ans2
  24. }
  25. };

思考:

考察递归的运用,这方面在前端领域应用不多,先前的想法是通过循环的嵌套来实现,没有成功解出,之后了解了一下回溯法,通过借鉴别人的代码完成了这道题。

总结:

虽然通过率很高,难度中等,但是我感觉这道题是我到目前为止做过最难的一道题,感觉仅仅依靠自己思考,根本想不出来这种方法,还是需要继续努力。