Skip to content

Commit 646f09c

Browse files
committed
feat: add solutions to lc problem: No.1886
No.1886.Determine Whether Matrix Can Be Obtained By Rotation
1 parent 2179d83 commit 646f09c

File tree

8 files changed

+262
-35
lines changed

8 files changed

+262
-35
lines changed

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

+99
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,16 @@ class Solution:
9191
return False
9292
```
9393

94+
```python
95+
class Solution:
96+
def findRotation(self, mat: List[List[int]], target: List[List[int]]) -> bool:
97+
for _ in range(4):
98+
mat = [list(col) for col in zip(*mat[::-1])]
99+
if mat == target:
100+
return True
101+
return False
102+
```
103+
94104
### **Java**
95105

96106
<!-- 这里可写当前语言的特殊实现逻辑 -->
@@ -135,6 +145,95 @@ class Solution {
135145
}
136146
```
137147

148+
```java
149+
class Solution {
150+
public boolean findRotation(int[][] mat, int[][] target) {
151+
int n = mat.length;
152+
for (int k = 0; k < 4; ++k) {
153+
int[][] g = new int[n][n];
154+
for (int i = 0; i < n; ++i) {
155+
for (int j = 0; j < n; ++j) {
156+
g[i][j] = mat[j][n - i - 1];
157+
}
158+
}
159+
if (equals(g, target)) {
160+
return true;
161+
}
162+
mat = g;
163+
}
164+
return false;
165+
}
166+
167+
private boolean equals(int[][] a, int[][] b) {
168+
int n = a.length;
169+
for (int i = 0; i < n; ++i) {
170+
for (int j = 0; j < n; ++j) {
171+
if (a[i][j] != b[i][j]) {
172+
return false;
173+
}
174+
}
175+
}
176+
return true;
177+
}
178+
}
179+
```
180+
181+
### **C++**
182+
183+
```cpp
184+
class Solution {
185+
public:
186+
bool findRotation(vector<vector<int>>& mat, vector<vector<int>>& target) {
187+
int n = mat.size();
188+
for (int k = 0; k < 4; ++k)
189+
{
190+
vector<vector<int>> g(n, vector<int>(n));
191+
for (int i = 0; i < n; ++i)
192+
for (int j = 0; j < n; ++j)
193+
g[i][j] = mat[j][n - i - 1];
194+
if (g == target) return true;
195+
mat = g;
196+
}
197+
return false;
198+
}
199+
};
200+
```
201+
202+
### **Go**
203+
204+
```go
205+
func findRotation(mat [][]int, target [][]int) bool {
206+
n := len(mat)
207+
for k := 0; k < 4; k++ {
208+
g := make([][]int, n)
209+
for i := range g {
210+
g[i] = make([]int, n)
211+
}
212+
for i := 0; i < n; i++ {
213+
for j := 0; j < n; j++ {
214+
g[i][j] = mat[j][n-i-1]
215+
}
216+
}
217+
if equals(g, target) {
218+
return true
219+
}
220+
mat = g
221+
}
222+
return false
223+
}
224+
225+
func equals(a, b [][]int) bool {
226+
for i, row := range a {
227+
for j, v := range row {
228+
if v != b[i][j] {
229+
return false
230+
}
231+
}
232+
}
233+
return true
234+
}
235+
```
236+
138237
### **TypeScript**
139238

140239
```ts

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

+99
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ class Solution:
6666
return False
6767
```
6868

69+
```python
70+
class Solution:
71+
def findRotation(self, mat: List[List[int]], target: List[List[int]]) -> bool:
72+
for _ in range(4):
73+
mat = [list(col) for col in zip(*mat[::-1])]
74+
if mat == target:
75+
return True
76+
return False
77+
```
78+
6979
### **Java**
7080

7181
```java
@@ -108,6 +118,95 @@ class Solution {
108118
}
109119
```
110120

121+
```java
122+
class Solution {
123+
public boolean findRotation(int[][] mat, int[][] target) {
124+
int n = mat.length;
125+
for (int k = 0; k < 4; ++k) {
126+
int[][] g = new int[n][n];
127+
for (int i = 0; i < n; ++i) {
128+
for (int j = 0; j < n; ++j) {
129+
g[i][j] = mat[j][n - i - 1];
130+
}
131+
}
132+
if (equals(g, target)) {
133+
return true;
134+
}
135+
mat = g;
136+
}
137+
return false;
138+
}
139+
140+
private boolean equals(int[][] a, int[][] b) {
141+
int n = a.length;
142+
for (int i = 0; i < n; ++i) {
143+
for (int j = 0; j < n; ++j) {
144+
if (a[i][j] != b[i][j]) {
145+
return false;
146+
}
147+
}
148+
}
149+
return true;
150+
}
151+
}
152+
```
153+
154+
### **C++**
155+
156+
```cpp
157+
class Solution {
158+
public:
159+
bool findRotation(vector<vector<int>>& mat, vector<vector<int>>& target) {
160+
int n = mat.size();
161+
for (int k = 0; k < 4; ++k)
162+
{
163+
vector<vector<int>> g(n, vector<int>(n));
164+
for (int i = 0; i < n; ++i)
165+
for (int j = 0; j < n; ++j)
166+
g[i][j] = mat[j][n - i - 1];
167+
if (g == target) return true;
168+
mat = g;
169+
}
170+
return false;
171+
}
172+
};
173+
```
174+
175+
### **Go**
176+
177+
```go
178+
func findRotation(mat [][]int, target [][]int) bool {
179+
n := len(mat)
180+
for k := 0; k < 4; k++ {
181+
g := make([][]int, n)
182+
for i := range g {
183+
g[i] = make([]int, n)
184+
}
185+
for i := 0; i < n; i++ {
186+
for j := 0; j < n; j++ {
187+
g[i][j] = mat[j][n-i-1]
188+
}
189+
}
190+
if equals(g, target) {
191+
return true
192+
}
193+
mat = g
194+
}
195+
return false
196+
}
197+
198+
func equals(a, b [][]int) bool {
199+
for i, row := range a {
200+
for j, v := range row {
201+
if v != b[i][j] {
202+
return false
203+
}
204+
}
205+
}
206+
return true
207+
}
208+
```
209+
111210
### **TypeScript**
112211

113212
```ts
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
bool findRotation(vector<vector<int>>& mat, vector<vector<int>>& target) {
4+
int n = mat.size();
5+
for (int k = 0; k < 4; ++k)
6+
{
7+
vector<vector<int>> g(n, vector<int>(n));
8+
for (int i = 0; i < n; ++i)
9+
for (int j = 0; j < n; ++j)
10+
g[i][j] = mat[j][n - i - 1];
11+
if (g == target) return true;
12+
mat = g;
13+
}
14+
return false;
15+
}
16+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
func findRotation(mat [][]int, target [][]int) bool {
2+
n := len(mat)
3+
for k := 0; k < 4; k++ {
4+
g := make([][]int, n)
5+
for i := range g {
6+
g[i] = make([]int, n)
7+
}
8+
for i := 0; i < n; i++ {
9+
for j := 0; j < n; j++ {
10+
g[i][j] = mat[j][n-i-1]
11+
}
12+
}
13+
if equals(g, target) {
14+
return true
15+
}
16+
mat = g
17+
}
18+
return false
19+
}
20+
21+
func equals(a, b [][]int) bool {
22+
for i, row := range a {
23+
for j, v := range row {
24+
if v != b[i][j] {
25+
return false
26+
}
27+
}
28+
}
29+
return true
30+
}

solution/1800-1899/1886.Determine Whether Matrix Can Be Obtained By Rotation/Solution.java

+14-21
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,26 @@
11
class Solution {
22
public boolean findRotation(int[][] mat, int[][] target) {
3-
int times = 4;
4-
while (times-- > 0) {
5-
if (equals(mat, target)) {
3+
int n = mat.length;
4+
for (int k = 0; k < 4; ++k) {
5+
int[][] g = new int[n][n];
6+
for (int i = 0; i < n; ++i) {
7+
for (int j = 0; j < n; ++j) {
8+
g[i][j] = mat[j][n - i - 1];
9+
}
10+
}
11+
if (equals(g, target)) {
612
return true;
713
}
8-
rotate(mat);
14+
mat = g;
915
}
1016
return false;
1117
}
12-
13-
private void rotate(int[][] matrix) {
14-
int n = matrix.length;
15-
for (int i = 0; i < n / 2; ++i) {
16-
for (int j = i; j < n - 1 - i; ++j) {
17-
int t = matrix[i][j];
18-
matrix[i][j] = matrix[n - j - 1][i];
19-
matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];
20-
matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
21-
matrix[j][n - i - 1] = t;
22-
}
23-
}
24-
}
25-
26-
private boolean equals(int[][] nums1, int[][] nums2) {
27-
int n = nums1.length;
18+
19+
private boolean equals(int[][] a, int[][] b) {
20+
int n = a.length;
2821
for (int i = 0; i < n; ++i) {
2922
for (int j = 0; j < n; ++j) {
30-
if (nums1[i][j] != nums2[i][j]) {
23+
if (a[i][j] != b[i][j]) {
3124
return false;
3225
}
3326
}
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,7 @@
11
class Solution:
22
def findRotation(self, mat: List[List[int]], target: List[List[int]]) -> bool:
3-
def rotate(matrix):
4-
n = len(matrix)
5-
for i in range(n // 2):
6-
for j in range(i, n - 1 - i):
7-
t = matrix[i][j]
8-
matrix[i][j] = matrix[n - j - 1][i]
9-
matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1]
10-
matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1]
11-
matrix[j][n - i - 1] = t
12-
133
for _ in range(4):
4+
mat = [list(col) for col in zip(*mat[::-1])]
145
if mat == target:
156
return True
16-
rotate(mat)
177
return False

solution/CONTEST_README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55

66
## 段位与荣誉勋章
77

8-
竞赛排名根据 竞赛积分(周赛和双周赛)进行计算,注册新用户的基础分值为 1500 分,在竞赛积分 &ge;1600 的用户中,根据比例 5%, 20%, 75% 设定三档段位,段位每周比赛结束后计算一次。
8+
竞赛排名根据竞赛积分(周赛和双周赛)进行计算,注册新用户的基础分值为 1500 分,在竞赛积分 &ge;1600 的用户中,根据比例 5%, 20%, 75% 设定三档段位,段位每周比赛结束后计算一次。
99

1010
如果竞赛积分处于段位的临界值,在每周比赛结束重新计算后会出现段位升级或降级的情况。段位升级或降级后会自动替换对应的荣誉勋章。
1111

12-
| 段位 | 比例 | 段位名 | 国服分数线 | 勋章展示 |
12+
| 段位 | 比例 | 段位名 | 国服分数线 | 勋章 |
1313
| ----- | ------ | -------- | --------- | --------------------------------------------------------------------------- |
1414
| LV3 | 5% | Guardian | &ge;2217.22 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Guardian.gif" style="width: 80px;" /></p> |
1515
| LV2 | 20% | Knight | &ge;1862.81 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Knight.gif" style="width: 80px;" /></p> |

solution/contest.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def generate_contest_list():
121121
122122
如果竞赛积分处于段位的临界值,在每周比赛结束重新计算后会出现段位升级或降级的情况。段位升级或降级后会自动替换对应的荣誉勋章。
123123
124-
| 段位 | 比例 | 段位名 | 国服分数线 | 勋章展示 |
124+
| 段位 | 比例 | 段位名 | 国服分数线 | 勋章 |
125125
| ----- | ------ | -------- | --------- | --------------------------------------------------------------------------- |
126126
| LV3 | 5% | Guardian | &ge;2217.22 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Guardian.gif" style="width: 80px;" /></p> |
127127
| LV2 | 20% | Knight | &ge;1862.81 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Knight.gif" style="width: 80px;" /></p> |

0 commit comments

Comments
 (0)