7.整数反転(Python)

1894 ワード

もっと素晴らしい内容は、「力ボタンの簡単な問題」に注目してください.
タイトル
難易度:★☆☆☆☆タイプ:数学
32ビットのシンボル付き整数を与えます.この整数の各ビットの数字を反転する必要があります.注意:我々の環境では32ビット以下の符号付き整数しか記憶できないと仮定すると、その数値範囲は[−2^31,2^31−1]である.この仮定に基づいて、反転後に整数がオーバーフローした場合は0を返します.

例1:
入力:123出力:321例2:
入力:-123出力:-321例3:
入力:120出力:21
に答える
シナリオ1:文字列に変換
2つの選択に注意すればいい:1.正負の数字の違い.2.最終結果が境界を越えたかどうか.
class Solution:
    def reverse(self, x):
        chars = list(str(x))    #               
        if x < 0:
            chars.remove('-')   #     
            chars.reverse()     #   
            r = ''.join(chars)  #       
            r = - int(r)     #     

        else:
            chars.reverse()     #   
            r = ''.join(chars)  #       
            r = int(r)       #     

        if not -pow(2, 31) <= r <= pow(2, 31) - 1:
            r = 0
        return r

Pythonの簡略版もあります.道理は同じです.
class Solution:
    def reverse(self, x):
        r = int('-' + ''.join(reversed(list(str(x).strip('-'))))) if x < 0 else int(''.join(reversed(list(str(x).strip('-')))))
        return r if -pow(2, 31) <= r <= pow(2, 31) - 1 else 0

シナリオ2:残高
私たちは反転する時、新しい変数numを定義するだけで、初期値は0で、入力値を10で割ることで最後の数tmpを取り出し続け、この変数に10とtmpを乗じて現在の数を得て、入力数字が右から左まですべての数字が新しい変数numに移されるまで繰り返します.
class Solution:
    def reverse(self, x):

        num = 0
        if x == 0:
            return 0
        if x < 0:
            x = -x
            while x != 0:
                num = num * 10 + x % 10
                x = x / 10
            num = -num
        else:
            while x != 0:
                num = num * 10 + x % 10
                x = x / 10

        if num > pow(2, 31) - 1 or num < pow(-2, 31):
            return 0
        return num

質問やアドバイスがあれば、コメントエリアへようこそ~