Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions 0048.Rotate-Image/memo.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# 48. Rotate Image

## step1
転置と反転でかける。4mぐらい。

転置と反転が二面体群d4の生成元であることから従う。

エラー処理を少しだけ変える。

## 他の人のコード

https://github.com/potrue/leetcode/pull/80

setを使った解法。メモリをO(n^2)使っているので二次元配列をもう一つ使う解法と変わらないのでは。

> matrix[y][x] となると思います

この順番はたまに目にする

https://leetcode.com/problems/rotate-image/solutions/8136968/rotate-image-sol-in-py-by-aryankumardube-8gti/

外部メモリを使って良いなら一行で書ける

```python
matrix[::]=[list(reversed(col)) for col in zip(*matrix)]
```

https://leetcode.com/problems/rotate-image/solutions/8134901/cyclic-orbit-permutation-by-mpractice-sfyq/

matrixを一度しか触らない方法もある。インデックスがややこしい。
12 changes: 12 additions & 0 deletions 0048.Rotate-Image/step1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
class Solution:
def rotate(self, matrix: list[list[int]]) -> None:
if not matrix or not matrix[0] or len(matrix) != len(matrix[0]):
raise ValueError("matrix is invalid")

for i in range(len(matrix)):
for j in range(i+1, len(matrix)):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]

for i in range(len(matrix)):
matrix[i].reverse()

14 changes: 14 additions & 0 deletions 0048.Rotate-Image/step1_revised.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
class Solution:
def rotate(self, matrix: list[list[int]]) -> None:
if not matrix or not matrix[0]:
return
if len(matrix) != len(matrix[0]):
raise ValueError("matrix is invalid")

for i in range(len(matrix)):
for j in range(i+1, len(matrix)):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]

for i in range(len(matrix)):
matrix[i].reverse()

13 changes: 13 additions & 0 deletions 0048.Rotate-Image/step2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class Solution:
def rotate(self, matrix: list[list[int]]) -> None:
for layer in range(len(matrix) // 2):
first = layer
last = len(matrix) - 1 - layer
for i in range(first, last):
offset = i - first

temp = matrix[first][i]
matrix[first][i] = matrix[last - offset][first]
matrix[last - offset][first] = matrix[last][last - offset]
matrix[last][last - offset] = matrix[i][last]
matrix[i][last] = temp