leetcode_46. 全排列 (廣度優先遍歷)

題目描述

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

示例:

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


解題思路一

廣度優先遍歷方法,遞歸解決

在這裏插入圖片描述
如圖所示, 我們需要3個信息:
1. 和已確定序列,
2. 剩餘序列

題解一:

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permute = function(nums) {
    let res = [];
    for (let i = 0; i < nums.length; i++) {
        let copy = [...nums];
        join(copy.splice(i,1), copy, res);
    }
    return res;
};
// preArr爲已確認的前序列
// arr爲剩餘的序列
var join = function(preArr, arr, res) {
    if (arr.length === 0) {
        return res.push(preArr);
    }
    for (let i = 0; i < arr.length; i++) {
        let copy = [...arr];
        join(preArr.concat(copy.splice(i,1)), copy, res);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章