【LeetCode簡単問題】2-Pythonで反転整数


宣言
今日は第2の简単な问题をして、これは犬の生が完全にブラシをかけた第2のLeetCode问题で、他の人の考えを参考にして、完全に自分で作っていませんが、しかし、ああ!ここに~を記録しておきます
タイトル
32ビットの符号付き整数を指定し、整数の数値を反転します.
eg1.入力-出力:123->321
eg2.入力-出力:-123->-321
eg3.入力-出力:120->21
本文
主な考え方は2種類です.1つ目は文字列に分解する処理であり、2つ目は整数を10を絶えず除いて下に整数を取って残数を得、さらに10を乗じて逆転整数の目的を達成することである.以下の解法1、2は第1種、解法3、4は第2種に属し、文末に参考にした他のブログリンクを添付し、削除します.
 
解法1.絶対値を取ってstringに強制変換し、string[:::-1]を逆順に出力してintに強制変換して結果を得、その整数の正負に基づいて結果を返す前に負の記号を付けるかどうかを決定します.
# V 1.0     
class Solution:
    def reverse(self, x):
        x_string = str(abs(x))
        if x < 2**31:
            rev_x = int(x_string[::-1])
            if x > 0:
                return rev_x
            else:
                return -rev_x

解法2.整数正負分離処理により、正数直接逆順出力後変換、負数負の番号を取った後のデジタル逆順出力後変換し、結果に負の番号を付け、最後に範囲検証を行う
# V 2.0    
class Solution:
    def reverse(self, x):
        if -10 < x < 10: #       
            return x
        else:
            str_x = str(x) 
            if str_x[0] != '-': #                int
                str_x = str_x[::-1]
                x = int(str_x)
            else:
                str_x = str_x[1:][::-1] #                      int
                x = int(str_x)
                x = -x
        return x if x > -2147483648 and x < 2147483648 else 0 #     

解法3.更に2つの方法の結合のようで、一方で文字列を利用して最後の1ビットを取る利便性を利用して、一方でまた整数の余剰を取って再び逆序数を計算する構想を採用しました.まず文字列に変換し、その長さを計算し、最初の文字が「-」かどうかによって正負が異なる判断分岐に入るかどうかを判断し、分岐の論理はまず1つのforループで文字列整数の最後の1ビットから10を乗算し、計算が終わって範囲検査を行い、それから戻る
# V 3.0    
class Solution:
    def reverse(self, x):
        str_x = str(x)
        x_len = len(str_x)
        count = 0
        if str_x[0] == '-':
            for i in range(x_len-1):
                count = count * 10 + int(str_x[-1-i]) #       1+i 
            if count < 2**31:
                return -count
            else:
                return 0
        else:
            for i in range(x_len):
                count = count * 10 + int(str_x[-1-i])
            if count < 2**31-1:
                return count 
            else:
                return 0

解法4.純粋な数学の処理、余剰を取って更に10を除いて下に整頓して、このように逆順に数字の各ビットを取得することができて、更に反復して10を乗じて逆順数を計算することができます
# V 4.0      
class Solution:
    def reverse(self, x):
        flag = 1 if x >= 0 else -1 #  flag      
        new_x = 0
        abs_x = abs(x)
        while abs_x:
            new_x = new_x*10 + abs_x%10
            abs_x //= 10 #           //  /,       12.3(     123),         12
        new_x = flag*new_x
        return new_x if new_x < 2147483648 and new_x >= -2147483648 else 0

 
参照
解法1&解法4:https://blog.csdn.net/coder_orz/article/details/52039990#commentsedit
解法2:https://blog.csdn.net/chenhua1125/article/details/80464642
解法3:https://blog.csdn.net/xiaoxiaoley/article/details/78721071