【LeetCode简单题】2-整数反转

一、情景描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:

输入: -123
输出: -321

示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2 ^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

二、思路
假设整数i>=0和i < 0两类
1) python中reverse怎么用的?是函数包吧。若要求不能用reverse怎么办?
2)s[::-1] 对于>=0的可以,(想错了,s得是字符串才能用)
(再次想:先把数字转字符串,用s[::-1],在转回数字;)
但是小于0的怎么办?保留符号??怎么做

三、实现
1)初步实现

  class Solution:
        def reverse(self,x):
            if x >= 0:
                return x[::-1]
            else:
       
   
class Solution:
    def reverse(self, x: int) -> int:
  
        if x >= 0:
            answer = str(x)
            answer = answer[::-1]
            answer = int(answer) # integer to string
        else:
            answer = abs(x)
            answer = str(answer)
            answer = answer[::-1]
            answer = '-' + answer
            answer = int(answer)  # integer to string

        if - 2**31 <= answer <= 2**31-1:
            return  answer
        else:
            return  0

leetcode 执行48ms,14MB通过。

2)参考改进

  if - 2**31 <= answer <= 2**31-1:
                return  answer
            else:
                return  0

改为:

 return answer if - 2**31 <= answer <= 2**31-1 else 0
 48ms,13.8MB

思路2:
循环通过对10取模得到尾部数字,一步步乘10构造新的翻转后的整数即可。然而要注意首先判断原数字的正负,最后还要判断结果是否溢出。
e.g:
个位数:123%10 = 3
十位数:123 // 10 = 12(按照除法/算,在取整)
12 % 10 =2
百位数: 12//10 = 1
1%10 = 1

注意:
1、符号怎么处理
2、得到各个位上的数字
3、各个位上的数字和反转后的数字的关系
循环终止条件://10= 0 ,即去整除为0。

class Solution:
    def  reverse(self,x):
          abs_x = abs(x)
          while(abs_x):
                                   abs_x%10   #???
                 abs_x = abs_x//10

参考:

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、python return只能用在函数中,不能用在if 语句(错误)
2、C++
1)程序结果一闪而过,怎么解决?
参考https://blog.csdn.net/bzhxuexi/article/details/16339045
在return 0;之前添加

cin.clear();
cin.sync();
cin.get();
return 0;
  1. / 除法:用于整数;返回商的整数部分
    python里是 //
    3、整数如何得到各个位置上的数字

五、总结
1、起初想法:先分类两类,负数怎么办??
2、思路2,不用字符串的方法务必掌握。

引用
https://blog.csdn.net/weixin_41011942/article/details/81146451

你可能感兴趣的:(LeetCode简单题)