Skip to content

Commit 3bd9bd7

Browse files
committed
feat: add solutions to lc problems: No.0078,1886
- No.0078.Subsets - No.1886.Determine Whether Matrix Can Be Obtained By Rotation
1 parent 358088e commit 3bd9bd7

File tree

7 files changed

+299
-1
lines changed

7 files changed

+299
-1
lines changed

solution/0000-0099/0078.Subsets/README.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,32 @@ func subsets(nums []int) [][]int {
140140
}
141141
```
142142

143+
### **Rust1**
144+
145+
```rust
146+
impl Solution {
147+
fn dfs(nums: &Vec<i32>, res: &mut Vec<Vec<i32>>, i: usize, base: &mut Vec<i32>) {
148+
let n = nums.len();
149+
if i == n {
150+
return;
151+
}
152+
for j in i..n {
153+
base.push(nums[j]);
154+
res.push(base.clone());
155+
Self::dfs(nums, res, j + 1, base);
156+
base.pop();
157+
}
158+
}
159+
160+
pub fn subsets(nums: Vec<i32>) -> Vec<Vec<i32>> {
161+
let mut base = vec![];
162+
let mut res = vec![vec![]];
163+
Self::dfs(&nums, &mut res, 0, &mut base);
164+
res
165+
}
166+
}
167+
```
168+
143169
### **...**
144170

145171
```

solution/0000-0099/0078.Subsets/README_EN.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,32 @@ func subsets(nums []int) [][]int {
132132
}
133133
```
134134

135+
### **Rust1**
136+
137+
```rust
138+
impl Solution {
139+
fn dfs(nums: &Vec<i32>, res: &mut Vec<Vec<i32>>, i: usize, base: &mut Vec<i32>) {
140+
let n = nums.len();
141+
if i == n {
142+
return;
143+
}
144+
for j in i..n {
145+
base.push(nums[j]);
146+
res.push(base.clone());
147+
Self::dfs(nums, res, j + 1, base);
148+
base.pop();
149+
}
150+
}
151+
152+
pub fn subsets(nums: Vec<i32>) -> Vec<Vec<i32>> {
153+
let mut base = vec![];
154+
let mut res = vec![vec![]];
155+
Self::dfs(&nums, &mut res, 0, &mut base);
156+
res
157+
}
158+
}
159+
```
160+
135161
### **...**
136162

137163
```
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
impl Solution {
2+
fn dfs(nums: &Vec<i32>, res: &mut Vec<Vec<i32>>, i: usize, base: &mut Vec<i32>) {
3+
let n = nums.len();
4+
if i == n {
5+
return;
6+
}
7+
for j in i..n {
8+
base.push(nums[j]);
9+
res.push(base.clone());
10+
Self::dfs(nums, res, j + 1, base);
11+
base.pop();
12+
}
13+
}
14+
15+
pub fn subsets(nums: Vec<i32>) -> Vec<Vec<i32>> {
16+
let mut base = vec![];
17+
let mut res = vec![vec![]];
18+
Self::dfs(&nums, &mut res, 0, &mut base);
19+
res
20+
}
21+
}

solution/1800-1899/1886.Determine Whether Matrix Can Be Obtained By Rotation/README.md

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,22 @@
4949

5050
<!-- 这里可写通用的实现逻辑 -->
5151

52-
旋转矩阵,判断矩阵是否一致。
52+
方法一:模拟旋转
53+
54+
旋转矩阵,判断矩阵是否一致,旋转方式同 [48. 旋转图像](https://leetcode-cn.com/problems/rotate-image/)
55+
56+
方法二:原地比较
57+
58+
此题不同于 [48. 旋转图像](https://leetcode-cn.com/problems/rotate-image/),并不要求改动原数组,因此,只要比较对应的位置即可。
59+
60+
| 旋转度数 | A | B |
61+
| -------- | ------ | -------------- |
62+
| 0 | `i, j` | `i, j` |
63+
| 90 | `i, j` | `j, n - i` |
64+
| 180 | `i, j` | `n - i, n - j` |
65+
| 270 | `i, j` | `n - j, i` |
66+
67+
> `n = A.length - 1 = B.length - 1`
5368
5469
<!-- tabs:start -->
5570

@@ -120,6 +135,79 @@ class Solution {
120135
}
121136
```
122137

138+
### **TypeScript**
139+
140+
```ts
141+
function findRotation(mat: number[][], target: number[][]): boolean {
142+
for (let k = 0; k < 4; k++) {
143+
rotate(mat);
144+
if (isEqual(mat, target)) {
145+
return true;
146+
}
147+
}
148+
return false;
149+
}
150+
151+
function isEqual(A: number[][], B: number[][]) {
152+
const n = A.length;
153+
for (let i = 0; i < n; i++) {
154+
for (let j = 0; j < n; j++) {
155+
if (A[i][j] !== B[i][j]) {
156+
return false;
157+
}
158+
}
159+
}
160+
return true;
161+
}
162+
163+
function rotate(matrix: number[][]): void {
164+
const n = matrix.length;
165+
for (let i = 0; i < n >> 1; i++) {
166+
for (let j = 0; j < (n + 1) >> 1; j++) {
167+
[
168+
matrix[i][j],
169+
matrix[n - 1 - j][i],
170+
matrix[n - 1 - i][n - 1 - j],
171+
matrix[j][n - 1 - i],
172+
] = [
173+
matrix[n - 1 - j][i],
174+
matrix[n - 1 - i][n - 1 - j],
175+
matrix[j][n - 1 - i],
176+
matrix[i][j],
177+
];
178+
}
179+
}
180+
}
181+
```
182+
183+
### **Rust**
184+
185+
```rust
186+
impl Solution {
187+
pub fn find_rotation(mat: Vec<Vec<i32>>, target: Vec<Vec<i32>>) -> bool {
188+
let n = mat.len();
189+
let mut is_equal = [true; 4];
190+
for i in 0..n {
191+
for j in 0..n {
192+
if is_equal[0] && mat[i][j] != target[i][j] {
193+
is_equal[0] = false;
194+
}
195+
if is_equal[1] && mat[i][j] != target[j][n - 1 - i] {
196+
is_equal[1] = false;
197+
}
198+
if is_equal[2] && mat[i][j] != target[n - 1 - i][n - 1 - j] {
199+
is_equal[2] = false;
200+
}
201+
if is_equal[3] && mat[i][j] != target[n - 1 - j][i] {
202+
is_equal[3] = false;
203+
}
204+
}
205+
}
206+
is_equal.into_iter().any(|&v| v)
207+
}
208+
}
209+
```
210+
123211
### **...**
124212

125213
```

solution/1800-1899/1886.Determine Whether Matrix Can Be Obtained By Rotation/README_EN.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,80 @@ class Solution {
108108
}
109109
```
110110

111+
### **TypeScript**
112+
113+
```ts
114+
function findRotation(mat: number[][], target: number[][]): boolean {
115+
for (let k = 0; k < 4; k++) {
116+
rotate(mat);
117+
if (isEqual(mat, target)) {
118+
return true;
119+
}
120+
}
121+
return false;
122+
}
123+
124+
function isEqual(A: number[][], B: number[][]) {
125+
const n = A.length;
126+
for (let i = 0; i < n; i++) {
127+
for (let j = 0; j < n; j++) {
128+
if (A[i][j] !== B[i][j]) {
129+
return false;
130+
}
131+
}
132+
}
133+
return true;
134+
}
135+
136+
function rotate(matrix: number[][]): void {
137+
const n = matrix.length;
138+
for (let i = 0; i < n >> 1; i++) {
139+
for (let j = 0; j < (n + 1) >> 1; j++) {
140+
[
141+
matrix[i][j],
142+
matrix[n - 1 - j][i],
143+
matrix[n - 1 - i][n - 1 - j],
144+
matrix[j][n - 1 - i],
145+
] = [
146+
matrix[n - 1 - j][i],
147+
matrix[n - 1 - i][n - 1 - j],
148+
matrix[j][n - 1 - i],
149+
matrix[i][j],
150+
];
151+
}
152+
}
153+
}
154+
155+
```
156+
157+
### **Rust**
158+
159+
```rust
160+
impl Solution {
161+
pub fn find_rotation(mat: Vec<Vec<i32>>, target: Vec<Vec<i32>>) -> bool {
162+
let n = mat.len();
163+
let mut is_equal = [true; 4];
164+
for i in 0..n {
165+
for j in 0..n {
166+
if is_equal[0] && mat[i][j] != target[i][j] {
167+
is_equal[0] = false;
168+
}
169+
if is_equal[1] && mat[i][j] != target[j][n - 1 - i] {
170+
is_equal[1] = false;
171+
}
172+
if is_equal[2] && mat[i][j] != target[n - 1 - i][n - 1 - j] {
173+
is_equal[2] = false;
174+
}
175+
if is_equal[3] && mat[i][j] != target[n - 1 - j][i] {
176+
is_equal[3] = false;
177+
}
178+
}
179+
}
180+
is_equal.into_iter().any(|&v| v)
181+
}
182+
}
183+
```
184+
111185
### **...**
112186

113187
```
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
impl Solution {
2+
pub fn find_rotation(mat: Vec<Vec<i32>>, target: Vec<Vec<i32>>) -> bool {
3+
let n = mat.len();
4+
let mut is_equal = [true; 4];
5+
for i in 0..n {
6+
for j in 0..n {
7+
if is_equal[0] && mat[i][j] != target[i][j] {
8+
is_equal[0] = false;
9+
}
10+
if is_equal[1] && mat[i][j] != target[j][n - 1 - i] {
11+
is_equal[1] = false;
12+
}
13+
if is_equal[2] && mat[i][j] != target[n - 1 - i][n - 1 - j] {
14+
is_equal[2] = false;
15+
}
16+
if is_equal[3] && mat[i][j] != target[n - 1 - j][i] {
17+
is_equal[3] = false;
18+
}
19+
}
20+
}
21+
is_equal.into_iter().any(|&v| v)
22+
}
23+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
function findRotation(mat: number[][], target: number[][]): boolean {
2+
for (let k = 0; k < 4; k++) {
3+
rotate(mat);
4+
if (isEqual(mat, target)) {
5+
return true;
6+
}
7+
}
8+
return false;
9+
}
10+
11+
function isEqual(A: number[][], B: number[][]) {
12+
const n = A.length;
13+
for (let i = 0; i < n; i++) {
14+
for (let j = 0; j < n; j++) {
15+
if (A[i][j] !== B[i][j]) {
16+
return false;
17+
}
18+
}
19+
}
20+
return true;
21+
}
22+
23+
function rotate(matrix: number[][]): void {
24+
const n = matrix.length;
25+
for (let i = 0; i < n >> 1; i++) {
26+
for (let j = 0; j < (n + 1) >> 1; j++) {
27+
[
28+
matrix[i][j],
29+
matrix[n - 1 - j][i],
30+
matrix[n - 1 - i][n - 1 - j],
31+
matrix[j][n - 1 - i],
32+
] = [
33+
matrix[n - 1 - j][i],
34+
matrix[n - 1 - i][n - 1 - j],
35+
matrix[j][n - 1 - i],
36+
matrix[i][j],
37+
];
38+
}
39+
}
40+
}

0 commit comments

Comments
 (0)