• 7. 整数反转


    题目:

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

    示例 1:

    输入: 123
    输出: 321 

    示例 2:

    输入: -123
    输出: -321

    示例 3:

    输入: 120
    输出: 21

    ★ 注意:

    假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0

    解法:

    • 转字符串法:

    思路:

      1、对于有符号的整数,尝试着找出对于正负数的处理异同点:

        【  正数:字符串的切片 [::-1],可实现反转。负数:扣除首位字符负号的反转切片 [:0:-1]或者[:-len(string):-1]  】

      2、需要设置在32位的数值范围内,反转会溢出的机制

     1 class Solution:
     2     def intReverse(self, x):
     3         str_x = str(x)
     4         if str_x[0] != '-':
     5             x = int(str_x[::-1])
     6         else:
     7             x = -int(str_x[:0:-1])  # [i:j:-1], j是取不到的,当i和j不给出时,i代表-1,j代表-len(a)-1,
     8                                     # 所以str_x[:0:-1]也可以写成str_x[:len(str_x):-1]
     9         
    10         # 数值范围[-2^31, 2^31-1]————>用二进制表示:[-(1<<31), (1<<31)-1]
    11         return  x if -(1<<31) < x < (1<<31)-1 else 0
    View Code
    • 数学法:

    思路:

      1、对于有符号的整数,尝试着找出对于正负数的处理异同点:

        【  通过绝对值的方式,统一处理数值,以取余和整除的手段循环,达到弹出末位数字的效果,以实现反转)  】

      2、需要设置在32位的数值范围内,反转会溢出的机制

     1 class Solution:
     2     def intReverse(self, x):
     3         y, rev = abs(x), 0
     4         # 数值范围[-2^31, 2^31-1]————>用二进制表示:[-(1<<31), (1<<31)-1]
     5         boundary = (1<<31)-1 if x>0 else 1<<31
     6         while y != 0:
     7             rev = rev*10 + y%10
     8             if rev > boundary:
     9                 return 0
    10             else:
    11                 y //= 10
    12         return rev if x > 0 else -rev
    View Code
    • 延伸知识点:

     ★★★  如有问题,欢迎指正:raykindle@163.com  ★★★

  • 相关阅读:
    面试总结
    java高级开发
    idea的快捷键
    微服务面试题目
    windows下jenkins的安装与配置
    微服务面试集合
    springlcoud中使用consul作为注册中心
    乐观锁和悲观锁
    volatile与synchronized的区别
    Java CAS 和ABA问题
  • 原文地址:https://www.cnblogs.com/raykindle/p/12516822.html
Copyright © 2020-2023  润新知