1. 程式人生 > >LeetCode 46. 全排列(Permutations)

LeetCode 46. 全排列(Permutations)

個數 nbsp num 返回 沒有 strong 一個 解題思路 urn

題目描述

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

示例:

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

解題思路

回溯法,從第一個數開始,依次與此位置向後的每一個位置交換得到新序列,然後遞歸向後重復此動作,在得到某位置開頭的所有序列後要把交換後的序列復原。

代碼

 1 class Solution {
 2 public:
 3     vector<vector<int>> permute(vector<int
>& nums) { 4 vector<vector<int>> res; 5 pmt(nums, 0, res); 6 return res; 7 } 8 void pmt(vector<int> &seq, int idx, vector<vector<int>> &res){ 9 if(idx == seq.size() - 1) 10 res.push_back(seq); 11 else
{ 12 for(int i = idx; i < seq.size(); i++){ 13 swap(seq[idx], seq[i]); 14 pmt(seq, idx + 1, res); 15 swap(seq[i], seq[idx]); 16 } 17 } 18 } 19 };

LeetCode 46. 全排列(Permutations)