zoukankan      html  css  js  c++  java
  • leetcode7之整数反转

    题目描述:

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

    示例1

    输入: -123
    输出: -321

    示例2:

    输入:-1200

    输出:-21

    代码实现:

     1 def reverse(x):
     2     '''
     3     32位 有符号整数反转
     4     :param x:
     5     :return:
     6     '''
     7     result = ""
     8     right = 0
     9     # 使用字符串切片形式进行反转
    10     res = str(x)[::-1]
    11     print(res)
    12     # 负号判断+去零操作
    13     num = 0  # 和首位相加是否为0来判断首位是否为0 为0:首位为0,不为0:首位不为0,继续第二位:若为0:第二位仍为0,否则继续相加
    14     if res[-1] == "-":
    15         result += res[-1]
    16         while right < len(res) - 1:
    17             num += int(res[right])
    18             if num == 0:  # 为0,继续下一位
    19                 right += 1
    20             else:
    21                 result += res[right]
    22                 right += 1
    23     else:
    24         while right < len(res):
    25             num += int(res[right])
    26             if num == 0:  # 为0,继续下一位
    27                 right += 1
    28             else:
    29                 result += res[right]
    30                 right += 1
    31     print(int(result))
    32     if result != "" and int(result) <= pow(2, 31) - 1 and int(result) >= pow(-2, 31):
    33         return int(result)
    34     else:
    35         return 0
    36 
    37 
    38 print('---------测试resverse()-----------')
    39 x = -901000
    40 result = reverse(x)
    41 print("result=", result)
    42 
    43 
    44 def reverse1(x):
    45     '''
    46 
    47     :param x:
    48     :return:
    49     '''
    50     x = str(x)
    51     res = ""
    52     if x[0] != "-":  # 正数
    53         x = x[::-1]
    54         x = int(x)
    55     elif x[0] == "-":  # 负数
    56         res += "-"
    57         x = x[1:][::-1]
    58         res += x
    59         x = int(res)
    60     else:  #
    61         x = int(x)
    62 
    63     return x if x >= pow(-2, 31) and x <= pow(2, 31) - 1 else 0
    64 
    65 
    66 print('---------测试resverse1()-----------')
    67 x = 0
    68 result = reverse1(x)
    69 print("result=", result)
    70 
    71 
    72 def reverse2(x):
    73     '''
    74 
    75     :param x:
    76     :return:
    77     '''
    78     flag = 0 if x < 0 else 1
    79     x = int(str(abs(x))[::-1])
    80     x=x if flag == 1 else -x
    81     return x if x >= pow(-2, 31) and x <= pow(2, 31) - 1 else 0
    82 
    83 # x=abs(x)
    84 # x=str(x)
    85 # x=x[::-1]
    86 # x=int(x)
    87 
    88 
    89 print('---------测试resverse2()-----------')
    90 x = 1534236469
    91 result = reverse2(x)
    92 print("result=", result)

    输出:

    ---------测试resverse()-----------
    000109-
    -109
    result= -109
    ---------测试resverse1()-----------
    result= 0
    ---------测试resverse2()-----------
    result= 0

    总结:方法1考虑的太复杂,思想有冗余,代码是思想的外在表现,当然也有冗余,存在大量的重复代码,把一个问题想的太复杂了,不可取但却是我首次想到的方法,从这个立场来说,方法1必不可少,是后面代码优化和精简的基石。

    方法2:从整数分类出发,判断正数、负数和零三种不同的情况。使用到了强制类型转换时的初始位为0时的舍去操作。代码精简了许多

    方法3:先记录下数的类型,正数负数还是零,然后从绝对值角度出发,代码更精简。

  • 相关阅读:
    20210519日报
    20210518日报
    20210517日报
    20210514日报
    20210513日报
    20210512日报
    20210511日报
    数据挖掘提分三板斧-转
    特征变量和y值的可视化
    kaggle 2015年航班延误
  • 原文地址:https://www.cnblogs.com/rounie/p/13232702.html
Copyright © 2011-2022 走看看