diff --git a/Algorithm/Other/leetcode/7. Reverse Integer/claude/README.html b/Algorithm/Other/leetcode/7. Reverse Integer/claude/README.html new file mode 100644 index 00000000..40030fe3 --- /dev/null +++ b/Algorithm/Other/leetcode/7. Reverse Integer/claude/README.html @@ -0,0 +1,1919 @@ + + +
+ + +文字列反転法による O(d) 実装
+ +
+ 32bit符号付き整数
+ x の桁を反転し、結果が
+ [-2³¹, 2³¹-1]
+ の範囲外になる場合は
+ 0
+ を返します。64bit整数の使用は禁止されています。
+
Input: x = 123
+Output: 321
+
+Input: x = -123
+Output: -321
+
+Input: x = 120
+Output: 21
+
+Input: x = 2147483647
+Output: 0 (範囲外)
+ -2³¹ ≤ x ≤ 2³¹-1+ ✓ 時間計算量: O(d) — d は桁数(最大10) +
++ ✓ 空間計算量: O(d) — 文字列スライスで一時領域 +
+
+ CPythonの str(), スライス
+ [::-1],
+ int()
+ はC実装で最適化されており、数値逐次処理より高速です。
+
from __future__ import annotations
+
+class Solution:
+ """
+ Reverse Integer (LeetCode #7)
+ 32-bit 符号付き整数 x の数字を反転。範囲外は 0 を返す。
+ """
+
+ # 32bit境界定数(クラス定数として明示)
+ INT_MAX: int = 2_147_483_647 # 2^31 - 1
+ INT_MIN: int = -2_147_483_648 # -2^31
+
+ def reverse(self, x: int) -> int:
+ """
+ 文字列反転法による最速実装
+
+ Args:
+ x: 32-bit signed integer
+
+ Returns:
+ 反転後の整数(範囲外は 0)
+
+ Time: O(d), Space: O(d) — d は桁数(最大10)
+ """
+ # 基底条件: 1桁はそのまま返す(早期リターン)
+ if -9 <= x <= 9:
+ return x
+
+ # 符号を分離して絶対値の文字列を反転
+ sign: int = -1 if x < 0 else 1
+ abs_x: int = -x if x < 0 else x
+
+ # C実装の高速な文字列処理を活用
+ # [::-1] スライスで反転、int() で整数化(先頭ゼロは自動削除)
+ rev_abs: int = int(str(abs_x)[::-1])
+
+ # 符号を適用
+ result: int = rev_abs * sign
+
+ # 32bit範囲チェック(Pythonの任意精度intを手動で拘束)
+ if result < self.INT_MIN or result > self.INT_MAX:
+ return 0
+
+ return result
+
+ フローの説明:
+ 1. 1桁判定で早期リターン(-9 ≤ x ≤ 9)
+ 2. 符号を分離し、絶対値を文字列に変換
+ 3. [::-1] で反転し、int() で整数化
+ 4. 符号を適用して元の符号を復元
+ 5. 32bit範囲チェックで範囲外なら 0 を返す
+ 6. 範囲内なら result を返す
+
str(), スライス
+ [::-1],
+ int() はすべて O(d)
+ | 手法 | +時間 | +空間 | ++ Python実装 + | +備考 | +
|---|---|---|---|---|
| + 文字列反転法 + | +O(d) | +O(d) | +最速 | +C実装の恩恵で高速 | +
| + 数値のみ(divmod) + | +O(d) | +O(1) | +中速 | +ループで逐次処理 | +
| 負数のまま処理 | +O(d) | +O(1) | +中速 | +分岐が増えがち | +