Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit f08b136

Browse files
committed
feat: 全排列问题
1 parent aa04bec commit f08b136

File tree

4 files changed

+75
-0
lines changed

4 files changed

+75
-0
lines changed

递归与回溯/全排列-46.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[][]}
4+
*/
5+
let permute = function (nums) {
6+
let n = nums.length
7+
if (n === 1) {
8+
return [nums]
9+
}
10+
11+
let res = []
12+
for (let i = 0; i < n; i++) {
13+
let use = nums[i]
14+
let rest = nums.slice(0, i).concat(nums.slice(i + 1, n))
15+
let restPermuteds = permute(rest)
16+
for (let restPermuted of restPermuteds) {
17+
res.push(restPermuted.concat(use))
18+
}
19+
}
20+
21+
return res
22+
}
23+
24+
console.log(permute([1, 2, 3]))
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
* @param {string} s
3+
* @return {string[][]}
4+
*/
5+
6+
let partition = function (s) {
7+
let n = s.length
8+
let ret = []
9+
let find = function (start, prev) {
10+
// 最少分割一个字符 最多分割到末尾前一位
11+
for (let i = 1; i <= n; i++) {
12+
let end = start + i
13+
let cur = s.substring(start, end)
14+
if (cur) {
15+
let res = prev.concat(cur)
16+
if (isPalindrome(cur)) {
17+
if (end === n) {
18+
ret.push(res)
19+
} else {
20+
find(start + i, res)
21+
}
22+
}
23+
}
24+
}
25+
}
26+
find(0, [])
27+
return ret
28+
}
29+
30+
function isPalindrome(s) {
31+
if (!s) {
32+
return false
33+
}
34+
let i = 0
35+
let j = s.length - 1
36+
37+
while (i < j) {
38+
let head = s[i]
39+
let tail = s[j]
40+
41+
if (head !== tail) {
42+
return false
43+
} else {
44+
i++
45+
j--
46+
}
47+
}
48+
return true
49+
}
50+
51+
console.log(partition("aab"))
File renamed without changes.

0 commit comments

Comments
 (0)