Skip to content

Commit 32ca260

Browse files
committed
feat: add solutions to lc problem: No.0048
No.0048.Rotate Image
1 parent 86c6b8d commit 32ca260

File tree

12 files changed

+261
-239
lines changed

12 files changed

+261
-239
lines changed

solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def findSubstring(self, s: str, words: List[str]) -> List[int]:
99
l = r = i
1010
t = 0
1111
while r + k <= m:
12-
w = s[r: r + k]
12+
w = s[r : r + k]
1313
r += k
1414
if w not in cnt:
1515
l = r
@@ -19,7 +19,7 @@ def findSubstring(self, s: str, words: List[str]) -> List[int]:
1919
cnt1[w] += 1
2020
t += 1
2121
while cnt1[w] > cnt[w]:
22-
remove = s[l: l + k]
22+
remove = s[l : l + k]
2323
l += k
2424
cnt1[remove] -= 1
2525
t -= 1

solution/0000-0099/0048.Rotate Image/README.md

+94-89
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,14 @@
4242

4343
<!-- 这里可写通用的实现逻辑 -->
4444

45+
**方法一:原地翻转**
46+
47+
根据题目要求,我们实际上需要将 $matrix[i][j]$ 旋转至 $matrix[j][n - i - 1]$。
48+
49+
我们可以先对矩阵进行上下翻转,即 $matrix[i][j]$ 和 $matrix[n - i - 1][j]$ 进行交换,然后再对矩阵进行主对角线翻转,即 $matrix[i][j]$ 和 $matrix[j][i]$ 进行交换。这样就能将 $matrix[i][j]$ 旋转至 $matrix[j][n - i - 1]$ 了。
50+
51+
时间复杂度 $O(n^2)$,其中 $n$ 是矩阵的边长。空间复杂度 $O(1)$。
52+
4553
<!-- tabs:start -->
4654

4755
### **Python3**
@@ -51,19 +59,13 @@
5159
```python
5260
class Solution:
5361
def rotate(self, matrix: List[List[int]]) -> None:
54-
"""
55-
Do not return anything, modify matrix in-place instead.
56-
"""
57-
s, n = 0, len(matrix)
58-
while s < (n >> 1):
59-
e = n - s - 1
60-
for i in range(s, e):
61-
t = matrix[i][e]
62-
matrix[i][e] = matrix[s][i]
63-
matrix[s][i] = matrix[n - i - 1][s]
64-
matrix[n - i - 1][s] = matrix[e][n - i - 1]
65-
matrix[e][n - i - 1] = t
66-
s += 1
62+
n = len(matrix)
63+
for i in range(n >> 1):
64+
for j in range(n):
65+
matrix[i][j], matrix[n - i - 1][j] = matrix[n - i - 1][j], matrix[i][j]
66+
for i in range(n):
67+
for j in range(i):
68+
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
6769
```
6870

6971
### **Java**
@@ -73,17 +75,20 @@ class Solution:
7375
```java
7476
class Solution {
7577
public void rotate(int[][] matrix) {
76-
int s = 0, n = matrix.length;
77-
while (s < (n >> 1)) {
78-
int e = n - s - 1;
79-
for (int i = s; i < e; ++i) {
80-
int t = matrix[i][e];
81-
matrix[i][e] = matrix[s][i];
82-
matrix[s][i] = matrix[n - i - 1][s];
83-
matrix[n - i - 1][s] = matrix[e][n - i - 1];
84-
matrix[e][n - i - 1] = t;
78+
int n = matrix.length;
79+
for (int i = 0; i < n >> 1; ++i) {
80+
for (int j = 0; j < n; ++j) {
81+
int t = matrix[i][j];
82+
matrix[i][j] = matrix[n - i - 1][j];
83+
matrix[n - i - 1][j] = t;
84+
}
85+
}
86+
for (int i = 0; i < n; ++i) {
87+
for (int j = 0; j < i; ++j) {
88+
int t = matrix[i][j];
89+
matrix[i][j] = matrix[j][i];
90+
matrix[j][i] = t;
8591
}
86-
++s;
8792
}
8893
}
8994
}
@@ -95,58 +100,50 @@ class Solution {
95100
class Solution {
96101
public:
97102
void rotate(vector<vector<int>>& matrix) {
98-
99103
int n = matrix.size();
100-
if (n <= 1) return;
101-
102-
// 先做转置
103-
for (int i = 0; i < n; i++) {
104-
for (int j = i; j < n; j++) {
105-
swap(matrix[i][j], matrix[j][i]);
104+
for (int i = 0; i < n >> 1; ++i) {
105+
for (int j = 0; j < n; ++j) {
106+
swap(matrix[i][j], matrix[n - i - 1][j]);
106107
}
107108
}
108-
109-
// 再做水平互换
110-
for (int i = 0; i < n; i++) {
111-
for (int j = 0; j < n / 2; j++) {
112-
swap(matrix[i][j], matrix[i][n - 1 - j]);
109+
for (int i = 0; i < n; ++i) {
110+
for (int j = 0; j < i; ++j) {
111+
swap(matrix[i][j], matrix[j][i]);
113112
}
114113
}
115114
}
116115
};
117116
```
118117
119-
### **JavaScript**
118+
### **Go**
120119
121-
```js
122-
/**
123-
* @param {number[][]} matrix
124-
* @return {void} Do not return anything, modify matrix in-place instead.
125-
*/
126-
var rotate = function (matrix) {
127-
const n = matrix.length;
128-
for (let i = 0; i < n; i++) {
129-
for (let j = 0; j <= i; j++) {
130-
[matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]];
131-
}
132-
}
133-
for (let i = 0, j = n - 1; i < j; i++, j--) {
134-
for (let k = 0; k < n; k++) {
135-
[matrix[k][i], matrix[k][j]] = [matrix[k][j], matrix[k][i]];
136-
}
137-
}
138-
};
120+
```go
121+
func rotate(matrix [][]int) {
122+
n := len(matrix)
123+
for i := 0; i < n>>1; i++ {
124+
for j := 0; j < n; j++ {
125+
matrix[i][j], matrix[n-i-1][j] = matrix[n-i-1][j], matrix[i][j]
126+
}
127+
}
128+
for i := 0; i < n; i++ {
129+
for j := 0; j < i; j++ {
130+
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
131+
}
132+
}
133+
}
139134
```
140135

136+
### **JavaScript**
137+
141138
```js
142139
/**
143140
* @param {number[][]} matrix
144141
* @return {void} Do not return anything, modify matrix in-place instead.
145142
*/
146143
var rotate = function (matrix) {
147144
matrix.reverse();
148-
for (let i = 0; i < matrix.length; i++) {
149-
for (let j = 0; j < i; j++) {
145+
for (let i = 0; i < matrix.length; ++i) {
146+
for (let j = 0; j < i; ++j) {
150147
[matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]];
151148
}
152149
}
@@ -160,14 +157,36 @@ var rotate = function (matrix) {
160157
Do not return anything, modify matrix in-place instead.
161158
*/
162159
function rotate(matrix: number[][]): void {
163-
let n = matrix[0].length;
164-
for (let i = 0; i < Math.floor(n / 2); i++) {
165-
for (let j = 0; j < Math.floor((n + 1) / 2); j++) {
166-
let tmp = matrix[i][j];
167-
matrix[i][j] = matrix[n - 1 - j][i];
168-
matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];
169-
matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];
170-
matrix[j][n - 1 - i] = tmp;
160+
matrix.reverse();
161+
for (let i = 0; i < matrix.length; ++i) {
162+
for (let j = 0; j < i; ++j) {
163+
const t = matrix[i][j];
164+
matrix[i][j] = matrix[j][i];
165+
matrix[j][i] = t;
166+
}
167+
}
168+
}
169+
```
170+
171+
### **C#**
172+
173+
```cs
174+
public class Solution {
175+
public void Rotate(int[][] matrix) {
176+
int n = matrix.Length;
177+
for (int i = 0; i < n >> 1; ++i) {
178+
for (int j = 0; j < n; ++j) {
179+
int t = matrix[i][j];
180+
matrix[i][j] = matrix[n - i - 1][j];
181+
matrix[n - i - 1][j] = t;
182+
}
183+
}
184+
for (int i = 0; i < n; ++i) {
185+
for (int j = 0; j < i; ++j) {
186+
int t = matrix[i][j];
187+
matrix[i][j] = matrix[j][i];
188+
matrix[j][i] = t;
189+
}
171190
}
172191
}
173192
}
@@ -179,38 +198,24 @@ function rotate(matrix: number[][]): void {
179198
impl Solution {
180199
pub fn rotate(matrix: &mut Vec<Vec<i32>>) {
181200
let n = matrix.len();
182-
for i in 0..n / 2 {
183-
for j in i..n - i - 1 {
201+
for i in 0..n/2 {
202+
for j in 0..n {
203+
let t = matrix[i][j];
204+
matrix[i][j] = matrix[n-i-1][j];
205+
matrix[n-i-1][j] = t;
206+
}
207+
}
208+
for i in 0..n {
209+
for j in 0..i {
184210
let t = matrix[i][j];
185-
matrix[i][j] = matrix[n - j - 1][i];
186-
matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];
187-
matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
188-
matrix[j][n - i - 1] = t;
211+
matrix[i][j] = matrix[j][i];
212+
matrix[j][i] = t;
189213
}
190214
}
191215
}
192216
}
193217
```
194218

195-
### **Go**
196-
197-
```go
198-
func rotate(matrix [][]int) {
199-
n := len(matrix)
200-
for i := 0; i < n; i++ {
201-
for j := i; j < n; j++ {
202-
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
203-
}
204-
}
205-
206-
for i := 0; i < n; i++ {
207-
for j, k := 0, n-1; j < k; j, k = j+1, k-1 {
208-
matrix[i][j], matrix[i][k] = matrix[i][k], matrix[i][j]
209-
}
210-
}
211-
}
212-
```
213-
214219
### **...**
215220

216221
```

0 commit comments

Comments
 (0)