class Solution:
def reverse(self, x: int) -> int:
#取整的原因是因为 由于Python的 // 操作是向下取整,导致正负数取余 % 操作结果不一致,因此需要将原数字转为正数操作。
#将每一位进行拆分,然后再进行组合
y, res = abs(x), 0
boundry = (1<<31) -1 if x>0 else 1<<31
while y != 0:
res = res*10 +y%10
if res > boundry :
return 0
y //=10
return res if x >0 else -res
#利用python的字符串特性进行处理
s = str(x)
if s[0]=='-':
s = s[1:]
return 0 if -1*int(s[::-1])>2**31 or -1*int(s[::-1])<-2**31 else -1*int(s[::-1])
else:
return 0 if int(s[::-1])>2**31 or -1*int(s[::-1])<-2**31 else int(s[::-1])
- 問題分析
- 文字列
- 整数を文字列化する
- 正の整数の場合は、文字列を逆にしたものと直接判断し、オーバーフローしていないか判断します。
- 数値が負の場合は、実際に逆にされた文字列を抽出し、逆フォレンジックを実行してから、オーバーフローしているかどうかを判断します
- 従来の分解と組み立て
- 最初に最後の桁を取り出し、元の桁の残りの10を取り出して取得します。
- 次に、元の番号に対して除算操作を実行して、最後の桁が削除された番号を取得してから、新しい番号の組み立てを続行します。
- 最後に、オーバーフローしたかどうかを判断します。処理中に直接オーバーフローした場合は、0を返します。
- それ以外の場合は、元の数値の符号を判別して戻り値を選択する必要があります
- 文字列
従来の分割では、実際には、コードの実装中に元の数値に対して絶対値演算が必要ですが、これはなぜですか?Pythonの言語機能で負の数を除算した結果が何であるかを確認できます。
結果から、切り捨てられていることがわかります。したがって、負の数の絶対値を取得して、処理される数が整数であることを確認し、除算に偏差がないようにする必要があります。
このトピックでは、文字列を整数に変換するとどうなるかという質問についても検討します。例として「123」を取り上げます
整数を123などの高位から定位に分割するにはどうすればよいですか?分割の結果はどうなりますか?
ここで結果を分割すると、結果は位置から高位置になり、結果リストを高位置から低位置に転送できます。これはまた組み立てることができます。たとえば、ソリューション1の方法。
概要:この質問では、データオーバーフローの問題を調べるだけでなく、Pythonで負の数を除算する方法、および整数を反転する方法についても調べます。Pythonの言語機能を使用できますが、前者のソリューションの方が一般的です。