Skip to content

Commit 32aa9fa

Browse files
committed
update
1 parent 305661c commit 32aa9fa

File tree

11 files changed

+261
-39
lines changed

11 files changed

+261
-39
lines changed

CATEGORY.md

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,6 @@ https://github.com/garciparedes
66

77
https://garciparedes.me/#headers
88

9-
- Backtracking
10-
11-
- [ ] 22
12-
- [ ] 39
13-
- [ ] 40
14-
- [ ] 46
15-
- [ ] 47
16-
- [ ] 60
17-
- [ ] 77
18-
- [ ] 78
19-
- [ ] 90
20-
- [ ] 131
21-
- [ ] 211
22-
- [ ] 216
23-
- [ ] 306
24-
- [ ] 357
25-
- [ ] 872
26-
- [ ] 17
27-
289
- Breadth First Search +5
2910

3011
- [ ] 107
@@ -127,3 +108,11 @@ https://garciparedes.me/#headers
127108
- [ ] 55
128109
- [ ] 78
129110
- [ ] 90
111+
112+
- Backtracking
113+
114+
- [ ] 17
115+
- [ ] 22
116+
- [ ] 78
117+
- [ ] 306
118+
- [ ] 872
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* @param {string} s
3+
* @return {string[][]}
4+
*/
5+
6+
var partition = function (s) {
7+
const res = [];
8+
backtracking([], "", 0);
9+
return res;
10+
11+
function backtracking(temp, preStr, index) {
12+
if (index === s.length) {
13+
if (preStr === "") {
14+
res.push(temp);
15+
}
16+
17+
return;
18+
}
19+
if (isPartition(preStr + s[index])) {
20+
backtracking([...temp, preStr + s[index]], "", index + 1);
21+
}
22+
23+
backtracking(temp, preStr + s[index], index + 1);
24+
}
25+
26+
function isPartition(str) {
27+
let left = 0;
28+
let right = str.length - 1;
29+
while (left < right) {
30+
if (str[left] !== str[right]) return false;
31+
left++;
32+
right--;
33+
}
34+
35+
return true;
36+
}
37+
};
38+
39+
console.log(partition("qbbc"));
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* @param {number} k
3+
* @param {number} n
4+
* @return {number[][]}
5+
*/
6+
var combinationSum3 = function (k, n) {
7+
const res = [];
8+
backtracking(0, [], 1);
9+
return res;
10+
11+
function backtracking(sum, temp, index) {
12+
if (temp.length > k || sum > n || index > 10) {
13+
return;
14+
}
15+
16+
if (temp.length === k) {
17+
if (sum === n) {
18+
res.push(temp);
19+
}
20+
return;
21+
}
22+
23+
backtracking(sum + index, [...temp, index], index + 1);
24+
backtracking(sum, temp, index + 1);
25+
}
26+
};
27+
28+
console.log(combinationSum3(9, 45));

src/216-combination-sum-iii/index.js

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
1-
// HELP:
2-
// backtracking
3-
4-
export const combinationSum3 = (k, n) => {
5-
let result = [];
6-
backtracking(result, k, n, [], 0, 1);
7-
return result;
8-
};
9-
10-
const backtracking = function(result, k, n, temp, sum, start) {
11-
if (sum === n && temp.length === k) {
12-
result.push(temp);
13-
} else {
14-
for (let i = start; i < 10; i++) {
15-
if (temp.indexOf(i) === -1) {
16-
backtracking(result, k, n, temp.concat(i), sum + i, i + 1);
17-
}
18-
}
19-
}
20-
};
1+
// backtracking
2+
3+
export const combinationSum3 = (k, n) => {
4+
let result = [];
5+
backtracking(result, k, n, [], 0, 1);
6+
return result;
7+
};
8+
9+
const backtracking = function (result, k, n, temp, sum, start) {
10+
if (sum === n && temp.length === k) {
11+
result.push(temp);
12+
} else {
13+
for (let i = start; i < 10; i++) {
14+
if (temp.indexOf(i) === -1) {
15+
backtracking(result, k, n, temp.concat(i), sum + i, i + 1);
16+
}
17+
}
18+
}
19+
};

src/306-additive-number/20210730.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* @param {string} num
3+
* @return {boolean}
4+
*/
5+
var isAdditiveNumber = function (num) {
6+
let res = false;
7+
backtracking([0], "", 0);
8+
return res;
9+
10+
function backtracking(temp, pre, index) {
11+
if (res) return;
12+
13+
if (index === num.length) {
14+
if (pre === "" && Number(temp[temp.length - 2]) + Number(temp[temp.length - 3]) === Number(temp[temp.length - 1])) {
15+
res = true;
16+
}
17+
return;
18+
}
19+
20+
if (temp.length <= 2 || (temp.length > 2 && Number(temp[temp.length - 1]) + Number(temp[temp.length - 2]) === Number(pre + num[index]))) {
21+
backtracking([...temp, pre + num[index]], "", index + 1);
22+
}
23+
24+
if (!(pre + num[index]).startsWith("0")) {
25+
backtracking(temp, pre + num[index], index + 1);
26+
}
27+
}
28+
};
29+
30+
console.log(isAdditiveNumber("101"));
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
export function countNumbersWithUniqueDigits(n) {
2+
const dp = [1, 10];
3+
4+
for (let i = 2; i <= n; i++) {
5+
const sum = Array.from({ length: i - 1 }, (_, index) => 9 - index).reduce((acc, num) => acc * num, 9);
6+
dp[i] = dp[i - 1] + sum;
7+
}
8+
9+
return dp[n];
10+
}

src/46-permutations/20210730.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[][]}
4+
*/
5+
var permute = function (nums) {
6+
const res = [];
7+
dfs([], nums);
8+
return res;
9+
10+
function dfs(temp, arr) {
11+
if (temp.length === nums.length) {
12+
res.push(temp);
13+
}
14+
15+
for (let i = 0; i < arr.length; i++) {
16+
dfs([...temp, arr[i]], [...arr.slice(0, i), ...arr.slice(i + 1)]);
17+
}
18+
}
19+
};
20+
21+
console.log(permute([1, 2]));

src/47-permutations-ii/20210730.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+
var permuteUnique = function (nums) {
6+
nums.sort((x, y) => x - y);
7+
const res = [];
8+
dfs([], nums);
9+
return res;
10+
11+
function dfs(temp, arr) {
12+
if (temp.length === nums.length) {
13+
res.push(temp);
14+
}
15+
for (let i = 0; i < arr.length; i++) {
16+
if (arr[i] === arr[i - 1]) {
17+
continue;
18+
}
19+
dfs([...temp, arr[i]], [...arr.slice(0, i), ...arr.slice(i + 1)]);
20+
}
21+
}
22+
};
23+
24+
console.log(permuteUnique([1, 2, 2]));
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* @param {number} n
3+
* @param {number} k
4+
* @return {string}
5+
*/
6+
var getPermutation = function (n, k) {
7+
let count = 0;
8+
let res = null;
9+
dfs(
10+
"",
11+
Array.from({ length: n }, (_, index) => index + 1)
12+
);
13+
return res;
14+
15+
function dfs(temp, arr) {
16+
if (count > k) return;
17+
18+
if (temp.length === n) {
19+
count++;
20+
if (count === k) {
21+
res = temp;
22+
}
23+
}
24+
25+
for (let i = 0; i < arr.length; i++) {
26+
dfs(temp + arr[i], [...arr.slice(0, i), ...arr.slice(i + 1)]);
27+
}
28+
}
29+
};
30+
31+
console.log(getPermutation(4, 9));

src/77-combinations/20210730.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* @param {number} n
3+
* @param {number} k
4+
* @return {number[][]}
5+
*/
6+
var combine = function (n, k) {
7+
const res = [];
8+
const arr = Array.from({ length: n }, (_, index) => index + 1);
9+
backtracking([], arr);
10+
return res;
11+
12+
function backtracking(temp, arr) {
13+
if (temp.length === k) {
14+
res.push(temp);
15+
return;
16+
}
17+
for (let i = 0; i < arr.length; i++) {
18+
backtracking([...temp, arr[i]], arr.slice(i + 1));
19+
}
20+
}
21+
};
22+
23+
console.log(combine(4, 2));

src/90-subsets-ii/20210730.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[][]}
4+
*/
5+
var subsetsWithDup = function (nums) {
6+
nums.sort((x, y) => x - y);
7+
const res = [];
8+
backtracking([], 0);
9+
return res;
10+
11+
function backtracking(temp, index) {
12+
if (index === nums.length) {
13+
res.push(temp);
14+
return;
15+
}
16+
17+
backtracking([...temp, nums[index]], index + 1);
18+
19+
let i = index + 1;
20+
while (i < nums.length && nums[i] === nums[i - 1]) {
21+
i++;
22+
}
23+
24+
backtracking(temp, i);
25+
}
26+
};
27+
28+
console.log(subsetsWithDup([1, 2, 2, 2]));

0 commit comments

Comments
 (0)