From 0d2ed6c2cf35e576ae2b340604da7b7e4f547ba6 Mon Sep 17 00:00:00 2001 From: shining-ai Date: Wed, 24 Apr 2024 18:01:29 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=E3=80=90Arai60=E3=80=9160=E5=95=8F?= =?UTF-8?q?=E7=9B=AE=206.=20Zigzag=20Conversion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../60_6_Zigzag Conversion/level_1.py | 20 ++++++++++++++ .../60_6_Zigzag Conversion/level_2.py | 26 +++++++++++++++++++ .../60_6_Zigzag Conversion/level_3.py | 18 +++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 arai60/54-60_others/60_6_Zigzag Conversion/level_1.py create mode 100644 arai60/54-60_others/60_6_Zigzag Conversion/level_2.py create mode 100644 arai60/54-60_others/60_6_Zigzag Conversion/level_3.py diff --git a/arai60/54-60_others/60_6_Zigzag Conversion/level_1.py b/arai60/54-60_others/60_6_Zigzag Conversion/level_1.py new file mode 100644 index 0000000..7541e3c --- /dev/null +++ b/arai60/54-60_others/60_6_Zigzag Conversion/level_1.py @@ -0,0 +1,20 @@ +# 各行の文字列をリストに格納して、最後に結合する。 +class Solution: + def convert(self, s: str, numRows: int) -> str: + if numRows == 1: + return s + rows = [[] for _ in range(numRows)] + num_row = 0 + direction = 1 + for c in s: + rows[num_row].append(c) + if num_row == 0: # 0行目で折り返し + direction = 1 + if num_row == numRows - 1: # 最終行で折り返し + direction = -1 + num_row += direction + merged_all_rows = [] + for row in rows: + merged_all_rows.extend(row) + zigzag_string = "".join(merged_all_rows) + return zigzag_string diff --git a/arai60/54-60_others/60_6_Zigzag Conversion/level_2.py b/arai60/54-60_others/60_6_Zigzag Conversion/level_2.py new file mode 100644 index 0000000..c2e1e81 --- /dev/null +++ b/arai60/54-60_others/60_6_Zigzag Conversion/level_2.py @@ -0,0 +1,26 @@ +# 何行目になるかは規則性があるので計算で求められる +# 2*n-2個周期で行が繰り返される +# 0 6 +# 1 5 7 +# 2 4 8 +# 3 +class Solution: + def convert(self, s: str, numRows: int) -> str: + if numRows == 1: + return s + rows = [[] for _ in range(numRows)] + cycle = 2 * numRows - 2 + for i in range(len(s)): + pos = i % (cycle) + if pos < numRows: # 下りのとき + num_row = pos + else: # 上りのとき + # [最下行] - [折り返して何個目か] + # (numRows - 1) - (pos - (numRows - 1)) + num_row = 2 * numRows - pos - 2 + rows[num_row].append(s[i]) + marged_all_rows = [] + for row in rows: + marged_all_rows.extend(row) + zigzag_string = "".join(marged_all_rows) + return zigzag_string diff --git a/arai60/54-60_others/60_6_Zigzag Conversion/level_3.py b/arai60/54-60_others/60_6_Zigzag Conversion/level_3.py new file mode 100644 index 0000000..a0c370b --- /dev/null +++ b/arai60/54-60_others/60_6_Zigzag Conversion/level_3.py @@ -0,0 +1,18 @@ +class Solution: + def convert(self, s: str, numRows: int) -> str: + if numRows == 1: + return s + rows = [[] for _ in range(numRows)] + num_row = 0 + direction = 1 + for c in s: + rows[num_row].append(c) + if num_row == 0: + direction = 1 + if num_row == numRows - 1: + direction = -1 + num_row += direction + merged_all_rows = [] + for row in rows: + merged_all_rows.extend(row) + return "".join(merged_all_rows) From a2db1e0955c94f30082e6ce305ffebe63ce879cf Mon Sep 17 00:00:00 2001 From: shining-ai Date: Thu, 25 Apr 2024 14:24:30 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=AE=E5=86=85=E5=AE=B9=E3=82=92=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../60_6_Zigzag Conversion/level_4.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 arai60/54-60_others/60_6_Zigzag Conversion/level_4.py diff --git a/arai60/54-60_others/60_6_Zigzag Conversion/level_4.py b/arai60/54-60_others/60_6_Zigzag Conversion/level_4.py new file mode 100644 index 0000000..2138e64 --- /dev/null +++ b/arai60/54-60_others/60_6_Zigzag Conversion/level_4.py @@ -0,0 +1,15 @@ +class Solution: + def convert(self, s: str, numRows: int) -> str: + if numRows == 1: + return s + rows = [[] for _ in range(numRows)] + rows_index = 0 + direction = 1 + for c in s: + rows[rows_index].append(c) + if rows_index == 0: + direction = 1 + if rows_index == numRows - 1: + direction = -1 + rows_index += direction + return "".join(c for row in rows for c in row)