Leetcodeプログラミング問題ノート2

9870 ワード

タイトル:
32ビットのシンボル付き整数を与えます.この整数の各ビットの数字を反転する必要があります.
例1:
入力:123出力:321例2:
入力:-123出力:-321例3:
入力:120出力:21注意:
我々の環境では32ビット以下の符号付き整数しか記憶できないと仮定すると,その数値範囲は[−231,231−1]である.この仮定に基づいて、反転後に整数がオーバーフローした場合は0を返します.
解法1:文字列に変換
class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        #         ,         ,    
        if -10 < x < 10:
            return x
        #    x     
        str_x = str(x)
        #           
        if str_x[0] != "-":
            #          
            str_x = str_x[::-1]
            # str  int
            x = int(str_x)
        else:
            #    ,           
            str_x = str_x[1:][::-1]
            # str int
            x = int(str_x)
            #     
            x = -x
        #      ,      
        #   -2147483648 < x < 2147483647   x,    0
        return x if -2147483648 < x < 2147483647 else 0

--------------------- 
  :     
  :CSDN 
  :https://blog.csdn.net/chenhua1125/article/details/80464642 
    :         ,         !

文字列の逆順序
b=a[i:j:s]というフォーマットですね.sはステップを表し、デフォルトは1です.したがって、a[i:j:1]はa[i:j]に相当するs<0の場合、iデフォルトの場合、デフォルトは-1である.jデフォルトでは、デフォルトは-len(a)-1なので、a[:-1]はa[-1:-len(a)-1:-1]に相当し、つまり最後の要素から最初の要素にコピーされます.逆順です.
解法2:数学演算

def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        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
--------------------- 
  :   
  :CSDN 
  :https://blog.csdn.net/qiubingcsdn/article/details/81744579 
    :         ,         !