Skip to content

Commit 4c12802

Browse files
committed
finish 78,79,89,90,93
1 parent 0b6c6b0 commit 4c12802

File tree

5 files changed

+431
-2
lines changed

5 files changed

+431
-2
lines changed

001-100/78. Subsets.md

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,29 @@ Output:
3030
## Solution
3131

3232
```javascript
33+
/**
34+
* @param {number[]} nums
35+
* @return {number[][]}
36+
*/
37+
var subsets = function(nums) {
38+
var res = [];
39+
helper(nums, res, [], 0);
40+
return res;
41+
};
3342

43+
var helper = function (nums, res, arr, start) {
44+
var len = nums.length;
45+
46+
res.push(Array.from(arr));
47+
48+
if (start === len) return;
49+
50+
for (var i = start; i < len; i++) {
51+
arr.push(nums[i]);
52+
helper(nums, res, arr, i + 1);
53+
arr.pop();
54+
}
55+
};
3456
```
3557

3658
**Explain:**
@@ -39,5 +61,5 @@ nope.
3961

4062
**Complexity:**
4163

42-
* Time complexity : O(n).
43-
* Space complexity : O(n).
64+
* Time complexity :
65+
* Space complexity :

001-100/79. Word Search.md

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
# 79. Word Search
2+
3+
- Difficulty: Medium.
4+
- Related Topics: Array, Backtracking.
5+
- Similar Questions: Word Search II.
6+
7+
## Problem
8+
9+
Given a 2D board and a word, find if the word exists in the grid.
10+
11+
The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.
12+
13+
**Example:**
14+
15+
```
16+
board =
17+
[
18+
['A','B','C','E'],
19+
['S','F','C','S'],
20+
['A','D','E','E']
21+
]
22+
23+
Given word = "ABCCED", return true.
24+
Given word = "SEE", return true.
25+
Given word = "ABCB", return false.
26+
```
27+
28+
## Solution 1
29+
30+
```javascript
31+
/**
32+
* @param {character[][]} board
33+
* @param {string} word
34+
* @return {boolean}
35+
*/
36+
var exist = function(board, word) {
37+
var len1 = board.length;
38+
var len2 = (board[0] || []).length;
39+
var len3 = word.length;
40+
var visited = null;
41+
42+
if (!len1 || !len2 || !len3) return false;
43+
44+
for (var i = 0; i < len1; i++) {
45+
for (var j = 0; j < len2; j++) {
46+
visited = Array(len1).fill(0).map(_ => Array(len2));
47+
if (helper(board, word, i, j, 0, visited)) return true;
48+
}
49+
}
50+
51+
return false;
52+
};
53+
54+
var helper = function (board, word, m, n, k, visited) {
55+
if (k === word.length) return true;
56+
if (m < 0 || m >= board.length) return false;
57+
if (n < 0 || n >= board[m].length) return false;
58+
if (visited[m][n]) return false;
59+
if (board[m][n] !== word[k]) return false;
60+
61+
var res = false;
62+
63+
visited[m][n] = true;
64+
65+
res = helper(board, word, m - 1, n, k + 1, visited)
66+
|| helper(board, word, m + 1, n, k + 1, visited)
67+
|| helper(board, word, m, n - 1, k + 1, visited)
68+
|| helper(board, word, m, n + 1, k + 1, visited);
69+
70+
if (!res) visited[m][n] = false;
71+
72+
return res;
73+
};
74+
```
75+
76+
**Explain:**
77+
78+
nope.
79+
80+
**Complexity:**
81+
82+
* Time complexity : O(3 * n * n * k). `n``board 字符总数``k``word` 长度。
83+
* Space complexity : O(n).
84+
85+
## Solution 2
86+
87+
```javascript
88+
/**
89+
* @param {character[][]} board
90+
* @param {string} word
91+
* @return {boolean}
92+
*/
93+
var exist = function(board, word) {
94+
var len1 = board.length;
95+
var len2 = (board[0] || []).length;
96+
var len3 = word.length;
97+
98+
if (!len1 || !len2 || !len3) return false;
99+
100+
for (var i = 0; i < len1; i++) {
101+
for (var j = 0; j < len2; j++) {
102+
if (helper(board, word, i, j, 0)) return true;
103+
}
104+
}
105+
106+
return false;
107+
};
108+
109+
var helper = function (board, word, m, n, k) {
110+
if (k === word.length) return true;
111+
if (m < 0 || m >= board.length) return false;
112+
if (n < 0 || n >= board[m].length) return false;
113+
if (board[m][n] !== word[k]) return false;
114+
115+
var res = false;
116+
var char = board[m][n];
117+
118+
board[m][n] = '#';
119+
120+
res = helper(board, word, m - 1, n, k + 1)
121+
|| helper(board, word, m + 1, n, k + 1)
122+
|| helper(board, word, m, n - 1, k + 1)
123+
|| helper(board, word, m, n + 1, k + 1);
124+
125+
if (!res) board[m][n] = char;
126+
127+
return res;
128+
};
129+
```
130+
131+
**Explain:**
132+
133+
上一方法的优化,用过的字符不再用 visited 数组存储,直接修改用过的字符为 `#`
134+
135+
**Complexity:**
136+
137+
* Time complexity : O(3 * n * k). `n``board 字符总数``k``word` 长度。
138+
* Space complexity : O(1).

001-100/89. Gray Code.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# 89. Gray Code
2+
3+
- Difficulty: Medium.
4+
- Related Topics: Backtracking.
5+
- Similar Questions: 1-bit and 2-bit Characters.
6+
7+
## Problem
8+
9+
The gray code is a binary numeral system where two successive values differ in only one bit.
10+
11+
Given a non-negative integer **n** representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.
12+
13+
For example, given **n** = 2, return ```[0,1,3,2]```. Its gray code sequence is:
14+
15+
```
16+
00 - 0
17+
01 - 1
18+
11 - 3
19+
10 - 2
20+
```
21+
22+
**Note:**
23+
24+
For a given **n**, a gray code sequence is not uniquely defined.
25+
26+
For example, ```[0,2,3,1]``` is also a valid gray code sequence according to the above definition.
27+
28+
For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.
29+
30+
## Solution 1
31+
32+
```javascript
33+
/**
34+
* @param {number} n
35+
* @return {number[]}
36+
*/
37+
var grayCode = function(n) {
38+
var res = [0];
39+
helper(n, res, 0);
40+
return res;
41+
};
42+
43+
var helper = function (n, res, num) {
44+
if (num >= n) return;
45+
var len = res.length;
46+
for (var i = len - 1; i >= 0; i--) {
47+
res.push(res[i] + len);
48+
}
49+
helper(n, res, num + 1);
50+
};
51+
```
52+
53+
**Explain:**
54+
55+
nope.
56+
57+
**Complexity:**
58+
59+
* Time complexity : O(2^n).
60+
* Space complexity : O(2^n).
61+
62+
## Solution 2
63+
64+
```javascript
65+
/**
66+
* @param {number} n
67+
* @return {number[]}
68+
*/
69+
var grayCode = function(n) {
70+
var res = [0];
71+
var len = 1;
72+
73+
for (var i = 0; i < n; i++) {
74+
len = res.length;
75+
for (var j = len - 1; j >= 0; j--) {
76+
res.push(res[j] + len);
77+
}
78+
}
79+
80+
return res;
81+
};
82+
83+
```
84+
85+
**Explain:**
86+
87+
nope.
88+
89+
**Complexity:**
90+
91+
* Time complexity : O(2^n).
92+
* Space complexity : O(2^n).

001-100/90. Subsets II.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# 90. Subsets II
2+
3+
- Difficulty: Medium.
4+
- Related Topics: Array, Backtracking.
5+
- Similar Questions: Subsets.
6+
7+
## Problem
8+
9+
Given a collection of integers that might contain duplicates, ****nums****, return all possible subsets (the power set).
10+
11+
**Note:** The solution set must not contain duplicate subsets.
12+
13+
**Example:**
14+
15+
```
16+
Input: [1,2,2]
17+
Output:
18+
[
19+
[2],
20+
[1],
21+
[1,2,2],
22+
[2,2],
23+
[1,2],
24+
[]
25+
]
26+
```
27+
28+
## Solution
29+
30+
```javascript
31+
/**
32+
* @param {number[]} nums
33+
* @return {number[][]}
34+
*/
35+
var subsetsWithDup = function(nums) {
36+
var res = [];
37+
nums.sort((a, b) => a - b);
38+
helper(nums, 0, res, []);
39+
return res;
40+
};
41+
42+
var helper = function (nums, start, res, now) {
43+
res.push(Array.from(now));
44+
45+
for (var i = start; i < nums.length; i++) {
46+
if (i === start || nums[i] !== nums[i - 1]) {
47+
now.push(nums[i]);
48+
helper(nums, i + 1, res, now);
49+
now.pop();
50+
}
51+
}
52+
};
53+
```
54+
55+
**Explain:**
56+
57+
nope.
58+
59+
**Complexity:**
60+
61+
* Time complexity :
62+
* Space complexity :

0 commit comments

Comments
 (0)