Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1b03ec6

Browse files
feat: add solutions to lc problems: No.0046,0078 (doocs#3916)
1 parent ea6a6b0 commit 1b03ec6

File tree

14 files changed

+243
-210
lines changed

14 files changed

+243
-210
lines changed

‎solution/0000-0099/0046.Permutations/README.md‎

Lines changed: 53 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -75,22 +75,14 @@ tags:
7575
```python
7676
class Solution:
7777
def permute(self, nums: List[int]) -> List[List[int]]:
78-
return list(permutations(nums))
79-
```
80-
81-
#### Python3
82-
83-
```python
84-
class Solution:
85-
def permute(self, nums: List[int]) -> List[List[int]]:
86-
def dfs(i):
87-
if i == n:
78+
def dfs(i: int):
79+
if i >= n:
8880
ans.append(t[:])
8981
return
90-
for jin range(n):
82+
for j, x in enumerate(nums):
9183
if not vis[j]:
9284
vis[j] = True
93-
t[i] = nums[j]
85+
t[i] = x
9486
dfs(i + 1)
9587
vis[j] = False
9688

@@ -146,7 +138,7 @@ public:
146138
vector<vector<int>> ans;
147139
vector<int> t(n);
148140
vector<bool> vis(n);
149-
function<void(int)> dfs = [&](int i) {
141+
auto dfs = [&](this auto&& dfs, int i) -> void {
150142
if (i == n) {
151143
ans.emplace_back(t);
152144
return;
@@ -179,10 +171,10 @@ func permute(nums []int) (ans [][]int) {
179171
ans = append(ans, slices.Clone(t))
180172
return
181173
}
182-
for j, v := range nums {
174+
for j, x := range nums {
183175
if !vis[j] {
184176
vis[j] = true
185-
t[i] = v
177+
t[i] = x
186178
dfs(i + 1)
187179
vis[j] = false
188180
}
@@ -198,43 +190,60 @@ func permute(nums []int) (ans [][]int) {
198190
```ts
199191
function permute(nums: number[]): number[][] {
200192
const n = nums.length;
201-
const res: number[][] = [];
193+
const ans: number[][] = [];
194+
const vis: boolean[] = Array(n).fill(false);
195+
const t: number[] = Array(n).fill(0);
202196
const dfs = (i: number) => {
203-
if (i === n) {
204-
res.push([...nums]);
197+
if (i >= n) {
198+
ans.push(t.slice());
199+
return;
205200
}
206-
for (let j = i; j < n; j++) {
207-
[nums[i], nums[j]] = [nums[j], nums[i]];
208-
dfs(i + 1);
209-
[nums[i], nums[j]] = [nums[j], nums[i]];
201+
for (let j = 0; j < n; ++j) {
202+
if (!vis[j]) {
203+
vis[j] = true;
204+
t[i] = nums[j];
205+
dfs(i + 1);
206+
vis[j] = false;
207+
}
210208
}
211209
};
212210
dfs(0);
213-
return res;
211+
return ans;
214212
}
215213
```
216214

217215
#### Rust
218216

219217
```rust
220218
impl Solution {
221-
fn dfs(i:usize, nums: &mutVec<i32>, res:&mutVec<Vec<i32>>) {
219+
pubfn permute(nums: Vec<i32>) ->Vec<Vec<i32>> {
222220
let n = nums.len();
223-
if i == n {
224-
res.push(nums.clone());
225-
return;
226-
}
227-
for j in i..n {
228-
nums.swap(i, j);
229-
Self::dfs(i + 1, nums, res);
230-
nums.swap(i, j);
221+
let mut ans = Vec::new();
222+
let mut t = vec![0; n];
223+
let mut vis = vec![false; n];
224+
fn dfs(
225+
nums: &Vec<i32>,
226+
n: usize,
227+
t: &mut Vec<i32>,
228+
vis: &mut Vec<bool>,
229+
ans: &mut Vec<Vec<i32>>,
230+
i: usize
231+
) {
232+
if i == n {
233+
ans.push(t.clone());
234+
return;
235+
}
236+
for j in 0..n {
237+
if !vis[j] {
238+
vis[j] = true;
239+
t[i] = nums[j];
240+
dfs(nums, n, t, vis, ans, i + 1);
241+
vis[j] = false;
242+
}
243+
}
231244
}
232-
}
233-
234-
pub fn permute(mut nums: Vec<i32>) -> Vec<Vec<i32>> {
235-
let mut res = vec![];
236-
Self::dfs(0, &mut nums, &mut res);
237-
res
245+
dfs(&nums, n, &mut t, &mut vis, &mut ans, 0);
246+
ans
238247
}
239248
}
240249
```
@@ -249,23 +258,22 @@ impl Solution {
249258
var permute = function (nums) {
250259
const n = nums.length;
251260
const ans = [];
252-
const t = [];
253-
const vis = newArray(n).fill(false);
254-
function dfs(i) {
261+
const vis = Array(n).fill(false);
262+
const t = Array(n).fill(0);
263+
const dfs=i=> {
255264
if (i >= n) {
256-
ans.push([...t]);
265+
ans.push(t.slice());
257266
return;
258267
}
259268
for (let j = 0; j < n; ++j) {
260269
if (!vis[j]) {
261270
vis[j] = true;
262-
t.push(nums[j]);
271+
t[i] =nums[j];
263272
dfs(i + 1);
264273
vis[j] = false;
265-
t.pop();
266274
}
267275
}
268-
}
276+
};
269277
dfs(0);
270278
return ans;
271279
};

‎solution/0000-0099/0046.Permutations/README_EN.md‎

Lines changed: 53 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -62,22 +62,14 @@ Similar problems:
6262
```python
6363
class Solution:
6464
def permute(self, nums: List[int]) -> List[List[int]]:
65-
return list(permutations(nums))
66-
```
67-
68-
#### Python3
69-
70-
```python
71-
class Solution:
72-
def permute(self, nums: List[int]) -> List[List[int]]:
73-
def dfs(i):
74-
if i == n:
65+
def dfs(i: int):
66+
if i >= n:
7567
ans.append(t[:])
7668
return
77-
for jin range(n):
69+
for j, x in enumerate(nums):
7870
if not vis[j]:
7971
vis[j] = True
80-
t[i] = nums[j]
72+
t[i] = x
8173
dfs(i + 1)
8274
vis[j] = False
8375

@@ -133,7 +125,7 @@ public:
133125
vector<vector<int>> ans;
134126
vector<int> t(n);
135127
vector<bool> vis(n);
136-
function<void(int)> dfs = [&](int i) {
128+
auto dfs = [&](this auto&& dfs, int i) -> void {
137129
if (i == n) {
138130
ans.emplace_back(t);
139131
return;
@@ -166,10 +158,10 @@ func permute(nums []int) (ans [][]int) {
166158
ans = append(ans, slices.Clone(t))
167159
return
168160
}
169-
for j, v := range nums {
161+
for j, x := range nums {
170162
if !vis[j] {
171163
vis[j] = true
172-
t[i] = v
164+
t[i] = x
173165
dfs(i + 1)
174166
vis[j] = false
175167
}
@@ -185,43 +177,60 @@ func permute(nums []int) (ans [][]int) {
185177
```ts
186178
function permute(nums: number[]): number[][] {
187179
const n = nums.length;
188-
const res: number[][] = [];
180+
const ans: number[][] = [];
181+
const vis: boolean[] = Array(n).fill(false);
182+
const t: number[] = Array(n).fill(0);
189183
const dfs = (i: number) => {
190-
if (i === n) {
191-
res.push([...nums]);
184+
if (i >= n) {
185+
ans.push(t.slice());
186+
return;
192187
}
193-
for (let j = i; j < n; j++) {
194-
[nums[i], nums[j]] = [nums[j], nums[i]];
195-
dfs(i + 1);
196-
[nums[i], nums[j]] = [nums[j], nums[i]];
188+
for (let j = 0; j < n; ++j) {
189+
if (!vis[j]) {
190+
vis[j] = true;
191+
t[i] = nums[j];
192+
dfs(i + 1);
193+
vis[j] = false;
194+
}
197195
}
198196
};
199197
dfs(0);
200-
return res;
198+
return ans;
201199
}
202200
```
203201

204202
#### Rust
205203

206204
```rust
207205
impl Solution {
208-
fn dfs(i:usize, nums: &mutVec<i32>, res:&mutVec<Vec<i32>>) {
206+
pubfn permute(nums: Vec<i32>) ->Vec<Vec<i32>> {
209207
let n = nums.len();
210-
if i == n {
211-
res.push(nums.clone());
212-
return;
213-
}
214-
for j in i..n {
215-
nums.swap(i, j);
216-
Self::dfs(i + 1, nums, res);
217-
nums.swap(i, j);
208+
let mut ans = Vec::new();
209+
let mut t = vec![0; n];
210+
let mut vis = vec![false; n];
211+
fn dfs(
212+
nums: &Vec<i32>,
213+
n: usize,
214+
t: &mut Vec<i32>,
215+
vis: &mut Vec<bool>,
216+
ans: &mut Vec<Vec<i32>>,
217+
i: usize
218+
) {
219+
if i == n {
220+
ans.push(t.clone());
221+
return;
222+
}
223+
for j in 0..n {
224+
if !vis[j] {
225+
vis[j] = true;
226+
t[i] = nums[j];
227+
dfs(nums, n, t, vis, ans, i + 1);
228+
vis[j] = false;
229+
}
230+
}
218231
}
219-
}
220-
221-
pub fn permute(mut nums: Vec<i32>) -> Vec<Vec<i32>> {
222-
let mut res = vec![];
223-
Self::dfs(0, &mut nums, &mut res);
224-
res
232+
dfs(&nums, n, &mut t, &mut vis, &mut ans, 0);
233+
ans
225234
}
226235
}
227236
```
@@ -236,23 +245,22 @@ impl Solution {
236245
var permute = function (nums) {
237246
const n = nums.length;
238247
const ans = [];
239-
const t = [];
240-
const vis = newArray(n).fill(false);
241-
function dfs(i) {
248+
const vis = Array(n).fill(false);
249+
const t = Array(n).fill(0);
250+
const dfs=i=> {
242251
if (i >= n) {
243-
ans.push([...t]);
252+
ans.push(t.slice());
244253
return;
245254
}
246255
for (let j = 0; j < n; ++j) {
247256
if (!vis[j]) {
248257
vis[j] = true;
249-
t.push(nums[j]);
258+
t[i] =nums[j];
250259
dfs(i + 1);
251260
vis[j] = false;
252-
t.pop();
253261
}
254262
}
255-
}
263+
};
256264
dfs(0);
257265
return ans;
258266
};

‎solution/0000-0099/0046.Permutations/Solution.cpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class Solution {
55
vector<vector<int>> ans;
66
vector<int> t(n);
77
vector<bool> vis(n);
8-
function<void(int)> dfs = [&](int i) {
8+
auto dfs = [&](thisauto&& dfs, int i) -> void {
99
if (i == n) {
1010
ans.emplace_back(t);
1111
return;
@@ -22,4 +22,4 @@ class Solution {
2222
dfs(0);
2323
return ans;
2424
}
25-
};
25+
};

‎solution/0000-0099/0046.Permutations/Solution.go‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ func permute(nums []int) (ans [][]int) {
88
ans = append(ans, slices.Clone(t))
99
return
1010
}
11-
for j, v := range nums {
11+
for j, x := range nums {
1212
if !vis[j] {
1313
vis[j] = true
14-
t[i] = v
14+
t[i] = x
1515
dfs(i + 1)
1616
vis[j] = false
1717
}
1818
}
1919
}
2020
dfs(0)
2121
return
22-
}
22+
}

‎solution/0000-0099/0046.Permutations/Solution.js‎

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,22 @@
55
var permute = function (nums) {
66
const n = nums.length;
77
const ans = [];
8-
const t = [];
9-
const vis = newArray(n).fill(false);
10-
function dfs(i) {
8+
const vis = Array(n).fill(false);
9+
const t = Array(n).fill(0);
10+
const dfs=i=> {
1111
if (i >= n) {
12-
ans.push([...t]);
12+
ans.push(t.slice());
1313
return;
1414
}
1515
for (let j = 0; j < n; ++j) {
1616
if (!vis[j]) {
1717
vis[j] = true;
18-
t.push(nums[j]);
18+
t[i]=nums[j];
1919
dfs(i + 1);
2020
vis[j] = false;
21-
t.pop();
2221
}
2322
}
24-
}
23+
};
2524
dfs(0);
2625
return ans;
2726
};

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /