runtime 0 ms, beats 100% of cpp submissions
O(n x n!) solution with explanation

tags: backtracking

Permutations

๐Ÿ“– description

็ตฆๅฎšไธ€ๅ€‹้™ฃๅˆ—๏ผŒๅ›žๅ‚ณไป–ๅ…จ้ƒจ่ƒฝ็ต„ๅˆ็š„ๆŽ’ๅˆ—๏ผŒ้™ฃๅˆ—ไธญไธๆœƒๆœ‰้‡่ค‡็š„ๅ…ƒ็ด ใ€‚

ex.
    Input: nums = [1,2,3]

    Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

๐Ÿง  solution

ๆ‰€่ฌ‚็š„ๅ…จๆŽ’ๅˆ—๏ผŒๅ…ถๅฏฆๅฐฑๆ˜ฏๆŠŠๆฏๅ€‹้ปž้ƒฝๅพ€ๅพŒๆ›็œ‹็œ‹๏ผŒ็ต„ๆˆไธ€ๅ€‹ๅ…จๆ–ฐ็š„ๆŽ’ๅˆ—๏ผŒไฝ†ๅœจ้€™่ฃกๆœƒ้ขๅฐๅˆฐไธ€ๅ€‹ๅ•้กŒ๏ผŒๆฏ”ๅฆ‚้Ž็จ‹ไธญๅฏ่ƒฝๅ‡บ็พ้‡่ค‡็š„็‹€ๆ…‹๏ผŒๆญคๆ™‚ๆˆ‘ๅ€‘ๅฏไปฅไฝฟ็”จ set ไพ†ๅŽป้™ค้‡่ค‡้ …๏ผŒไฝ†้€™ๆจฃๅšๆœƒๅขžๅŠ ่จˆ็ฎ—้‡ไปฅๅŠ็ฉบ้–“็š„้œ€ๆฑ‚๏ผŒๆ‰€ไปฅๆˆ‘ๅ€‘ๅฏไปฅ้€้Ž่ฎ“ๆ“ไฝœๅ‡บ็พ้ †ๅบๆ€งไพ†้ฟๅ…๏ผŒๆฏ”ๅฆ‚ไธ€ๅฎšๅ…ˆๅพž็ฌฌ 1 ไฝๅพ€ๅพŒๆ› (ไปฅๆญค้กžๆŽจ 2ใ€3 โ€ฆ) ๏ผŒไปฅๅŠไบคๆ›ๅช่ƒฝๅพ€ๅพŒๆ›๏ผŒ้€™ๆจฃๅฐฑไธๆœƒๅ‡บๅ…ˆไบคๆ› 1ใ€2 ๅ†ไบคๆ› 2ใ€1 ๅ‡บ็พ้‡่ค‡็š„็‹€ๆ…‹๏ผŒไนŸไธๆœƒๆœ‰ไบคๆ› 1ใ€2 , 2ใ€3 ่ˆ‡ 2ใ€3 , 1ใ€3 ็š„ๆƒ…ๆณใ€‚

้‚„ๆœ‰ไธ€ๅ€‹ๆœ€้‡่ฆ็š„้‡้ปž๏ผŒๆฏๆฌกไบคๆ›ๆ™‚ๆˆ‘ๅ€‘ๅฏไปฅ้ธๆ“‡ไธๆ›ใ€‚

โณ time complexity

ๅ…ฑๆœ‰ n! ๅ€‹่งฃ๏ผŒๆฏๅ€‹่งฃ้ƒฝ็ถ“้Ž n ๆฌกไบคๆ›๏ผŒๆ™‚้–“่ค‡้›œๅบฆ O(n x n!)
็ธฝๆ™‚้–“่ค‡้›œๅบฆ O(n x n!)

๐Ÿ“ code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
vector<vector<int>> ans;
void re(vector<int>& n,int ind){
if(ind == n.size()){
ans.emplace_back(n);
}
for(int i=ind;i<n.size();i++){ // ็•ถ i=ind ๆ™‚ไธๆœƒไบคๆ›ๅ…ƒ็ด 
swap(n[ind],n[i]);
re(n,ind+1);
swap(n[ind],n[i]);
}
}
vector<vector<int>> permute(vector<int>& nums) {
re(nums,0);
return ans;
}
};