Skip to content

Commit

Permalink
feat(leecode): 46.全排列
Browse files Browse the repository at this point in the history
  • Loading branch information
z979054461 committed Mar 21, 2024
1 parent 5301e4a commit ebfee22
Show file tree
Hide file tree
Showing 3 changed files with 131 additions and 0 deletions.
66 changes: 66 additions & 0 deletions docs/10.LeeCode/46.全排列.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
---
title: 46.全排列
date: 2024-03-21
lang: 'zh-CN'
sidebar: 'auto'
categories:
- LeeCode
tags:
location: HangZhou
---

# Heading

[[toc]]

[46.全排列](https://leetcode.cn/problems/permutations/description/)

Tags: algorithms linkedin microsoft backtracking

Langs: c cpp csharp dart elixir erlang golang java javascript kotlin php python python3 racket ruby rust scala swift typescript

- algorithms
- Medium (79.07%)
- Likes: 2846
- Dislikes: -
- Total Accepted: 1M
- Total Submissions: 1.3M
- Testcase Example: '[1,2,3]'

<p>给定一个不含重复数字的数组 <code>nums</code> ,返回其 <em>所有可能的全排列</em> 。你可以 <strong>按任意顺序</strong> 返回答案。</p>

<p>&nbsp;</p>

<p><strong>示例 1:</strong></p>

<pre>
<strong>输入:</strong>nums = [1,2,3]
<strong>输出:</strong>[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
</pre>

<p><strong>示例 2:</strong></p>

<pre>
<strong>输入:</strong>nums = [0,1]
<strong>输出:</strong>[[0,1],[1,0]]
</pre>

<p><strong>示例 3:</strong></p>

<pre>
<strong>输入:</strong>nums = [1]
<strong>输出:</strong>[[1]]
</pre>

<p>&nbsp;</p>

<p><strong>提示:</strong></p>

<ul>
<li><code>1 &lt;= nums.length &lt;= 6</code></li>
<li><code>-10 &lt;= nums[i] &lt;= 10</code></li>
<li><code>nums</code> 中的所有整数 <strong>互不相同</strong></li>
</ul>

<<< @/src/LeeCode/46.全排列.js
<<< @/src/LeeCode/46.全排列1.js
30 changes: 30 additions & 0 deletions src/LeeCode/46.全排列.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* @lc app=leetcode.cn id=46 lang=javascript
*
* [46] 全排列
* 回溯
*/

// @lc code=start
/**
* @param {number[]} nums
* @return {number[][]}
*/
var permute = function (nums) {
const result = []
const dfs = (current, arr) => {
if (arr.length === 0) {
result.push(current)
}

for (let i = 0; i < arr.length; i++) {
dfs(
[...current, arr[i]],
arr.filter((item, index) => index !== i),
)
}
}
dfs([], nums)
return result
}
// @lc code=end
35 changes: 35 additions & 0 deletions src/LeeCode/46.全排列1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* @lc app=leetcode.cn id=46 lang=javascript
*
* [46] 全排列
* 递归
*/

// @lc code=start
/**
* @param {number[]} nums
* @return {number[][]}
*/
var permute = function (nums) {
if (nums.length === 0) {
return []
}
if (nums.length === 1) {
return [nums]
}

const [first, ...rest] = nums
const restArrange = permute(rest)

const result = restArrange.reduce((acc, item) => {
for (let i = 0; i <= item.length; i++) {
const tmp = [...item]
tmp.splice(i, 0, first)
acc.push(tmp)
}
return acc
}, [])

return result
}
// @lc code=end

0 comments on commit ebfee22

Please sign in to comment.