Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 25c77f3

Browse files
feat: add solutions to lcci problems: No.01.07~01.09 (#2094)
1 parent b44a398 commit 25c77f3

File tree

13 files changed

+404
-121
lines changed

13 files changed

+404
-121
lines changed

‎lcci/01.07.Rotate Matrix/README.md‎

Lines changed: 129 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,13 @@
5151

5252
<!-- 这里可写通用的实现逻辑 -->
5353

54-
原地旋转,i 的范围是 `[0, n/2)`,j 的范围是 `[i, n-1-i)`
54+
**方法一:原地翻转**
55+
56+
根据题目要求,我们实际上需要将 $matrix[i][j]$ 旋转至 $matrix[j][n - i - 1]$。
57+
58+
我们可以先对矩阵进行上下翻转,即 $matrix[i][j]$ 和 $matrix[n - i - 1][j]$ 进行交换,然后再对矩阵进行主对角线翻转,即 $matrix[i][j]$ 和 $matrix[j][i]$ 进行交换。这样就能将 $matrix[i][j]$ 旋转至 $matrix[j][n - i - 1]$ 了。
59+
60+
时间复杂度 $O(n^2),ドル其中 $n$ 是矩阵的边长。空间复杂度 $O(1)$。
5561

5662
<!-- tabs:start -->
5763

@@ -62,17 +68,13 @@
6268
```python
6369
class Solution:
6470
def rotate(self, matrix: List[List[int]]) -> None:
65-
"""
66-
Do not return anything, modify matrix in-place instead.
67-
"""
6871
n = len(matrix)
69-
for i in range(n // 2):
70-
for j in range(i, n - 1 - i):
71-
t = matrix[i][j]
72-
matrix[i][j] = matrix[n - j - 1][i]
73-
matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1]
74-
matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1]
75-
matrix[j][n - i - 1] = t
72+
for i in range(n >> 1):
73+
for j in range(n):
74+
matrix[i][j], matrix[n - i - 1][j] = matrix[n - i - 1][j], matrix[i][j]
75+
for i in range(n):
76+
for j in range(i):
77+
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
7678
```
7779

7880
### **Java**
@@ -83,19 +85,63 @@ class Solution:
8385
class Solution {
8486
public void rotate(int[][] matrix) {
8587
int n = matrix.length;
86-
for (int i = 0; i < n / 2; ++i) {
87-
for (int j = i; j < n - 1 - i; ++j) {
88+
for (int i = 0; i < n >> 1; ++i) {
89+
for (int j = 0; j < n; ++j) {
90+
int t = matrix[i][j];
91+
matrix[i][j] = matrix[n - i - 1][j];
92+
matrix[n - i - 1][j] = t;
93+
}
94+
}
95+
for (int i = 0; i < n; ++i) {
96+
for (int j = 0; j < i; ++j) {
8897
int t = matrix[i][j];
89-
matrix[i][j] = matrix[n - j - 1][i];
90-
matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];
91-
matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
92-
matrix[j][n - i - 1] = t;
98+
matrix[i][j] = matrix[j][i];
99+
matrix[j][i] = t;
93100
}
94101
}
95102
}
96103
}
97104
```
98105

106+
### **C++**
107+
108+
```cpp
109+
class Solution {
110+
public:
111+
void rotate(vector<vector<int>>& matrix) {
112+
int n = matrix.size();
113+
for (int i = 0; i < n >> 1; ++i) {
114+
for (int j = 0; j < n; ++j) {
115+
swap(matrix[i][j], matrix[n - i - 1][j]);
116+
}
117+
}
118+
for (int i = 0; i < n; ++i) {
119+
for (int j = 0; j < i; ++j) {
120+
swap(matrix[i][j], matrix[j][i]);
121+
}
122+
}
123+
}
124+
};
125+
```
126+
127+
### **Go**
128+
129+
```go
130+
func rotate(matrix [][]int) {
131+
n := len(matrix)
132+
for i := 0; i < n>>1; i++ {
133+
for j := 0; j < n; j++ {
134+
matrix[i][j], matrix[n-i-1][j] = matrix[n-i-1][j], matrix[i][j]
135+
}
136+
}
137+
for i := 0; i < n; i++ {
138+
for j := 0; j < i; j++ {
139+
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
140+
}
141+
}
142+
}
143+
```
144+
99145
### **JavaScript**
100146

101147
```js
@@ -104,34 +150,78 @@ class Solution {
104150
* @return {void} Do not return anything, modify matrix in-place instead.
105151
*/
106152
var rotate = function (matrix) {
107-
const n = matrix.length;
108-
for (let i = 0; i < n / 2; i++) {
109-
for (let j = i; j < n - i - 1; j++) {
110-
let t = matrix[i][j];
111-
matrix[i][j] = matrix[n - j - 1][i];
112-
matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];
113-
matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
114-
matrix[j][n - i - 1] = t;
153+
matrix.reverse();
154+
for (let i = 0; i < matrix.length; ++i) {
155+
for (let j = 0; j < i; ++j) {
156+
[matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]];
115157
}
116158
}
117159
};
118160
```
119161

120-
### **Go**
162+
### **TypeScript**
121163

122-
```go
123-
func rotate(matrix [][]int) {
124-
n := len(matrix)
125-
r, c := n/2, (n+1)/2
126-
for i := 0; i < r; i++ {
127-
for j := 0; j < c; j++ {
128-
temp := matrix[i][j]
129-
matrix[i][j] = matrix[n-j-1][i]
130-
matrix[n-j-1][i] = matrix[n-i-1][n-j-1]
131-
matrix[n-i-1][n-j-1] = matrix[j][n-i-1]
132-
matrix[j][n-i-1] = temp
133-
}
134-
}
164+
```ts
165+
/**
166+
Do not return anything, modify matrix in-place instead.
167+
*/
168+
function rotate(matrix: number[][]): void {
169+
matrix.reverse();
170+
for (let i = 0; i < matrix.length; ++i) {
171+
for (let j = 0; j < i; ++j) {
172+
const t = matrix[i][j];
173+
matrix[i][j] = matrix[j][i];
174+
matrix[j][i] = t;
175+
}
176+
}
177+
}
178+
```
179+
180+
### **C#**
181+
182+
```cs
183+
public class Solution {
184+
public void Rotate(int[][] matrix) {
185+
int n = matrix.Length;
186+
for (int i = 0; i < n >> 1; ++i) {
187+
for (int j = 0; j < n; ++j) {
188+
int t = matrix[i][j];
189+
matrix[i][j] = matrix[n - i - 1][j];
190+
matrix[n - i - 1][j] = t;
191+
}
192+
}
193+
for (int i = 0; i < n; ++i) {
194+
for (int j = 0; j < i; ++j) {
195+
int t = matrix[i][j];
196+
matrix[i][j] = matrix[j][i];
197+
matrix[j][i] = t;
198+
}
199+
}
200+
}
201+
}
202+
```
203+
204+
### **Rust**
205+
206+
```rust
207+
impl Solution {
208+
pub fn rotate(matrix: &mut Vec<Vec<i32>>) {
209+
let n = matrix.len();
210+
for i in 0..n / 2 {
211+
for j in 0..n {
212+
let t = matrix[i][j];
213+
matrix[i][j] = matrix[n - i - 1][j];
214+
matrix[n - i - 1][j] = t;
215+
}
216+
}
217+
for i in 0..n {
218+
for j in 0..i {
219+
let t = matrix[i][j];
220+
matrix[i][j] = matrix[j][i];
221+
matrix[j][i] = t;
222+
}
223+
}
224+
}
135225
}
136226
```
137227

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /