题目


Given a 32-bit signed integer, reverse digits of an integer.

Example1: x = 123, return 321

Example2: x = -123,return -321

Example3: x = 120, return 21

思路


问题的关键在于对溢出的判断。

思路1:用long或者long long

直接用long或者long long计算,这样就保证不会溢出,再判断反转后的数字是否溢出。

思路2:stoi()

通过字符串转换,由于stoi()函数会作int范围检查,利用异常处理机制。

思路3:字符串分片(python)

python中int都是长整型,可以通过直接比较32位整数大小来判断是否溢出。通过字符串分片来完成反转。

Tips


C++知识

  • integer范围:\(-2^{31} \sim 2^{31}-1\)
  • short为半个机器字长,int为一个机器字长,long类型为一个或者两个机器字长
  • stoi()字符处理函数,将数字字符串转换成int输出,并且对作范围检查,默认范围是在int范围内,如果超出范围会runtime error。

整数翻转

通过取余操作读取当前输入x的个位数,放到反转后的整数s的末位,通过s*10加上x的末位得到新的s,相当于将x左移一位。再通过x=x/10的操作,使得x右移一位,x的个位数到了小数位被强制类型转换掉了,再取余得到新的个位数。

判断溢出

  • 与INT_MAX、INT_MIN作比较
  • 对数作一些运算,如果溢出了,那么运算后的值作反向操作会和之前的值不一样。

Python知识

字符串的分片

  • 有三个被索引运算符(:)分开的数字,第一个数字是起始值,默认是字符串的起始位置,即索引为0;第二个数字是结束值,默认是字符串的末尾字符;第三个数字是步长,默认为1。
  • 步长为-1时,python认为是向后进行
  • python采用的是半开区间,包含范围的起始值,但是不包含结束值。

C++


  • 思路1
int reverse(int x){
long long res=0;
while(x!=0){
int t = res * 10 + x % 10;
if(t /10 != res)
return 0;
res = t;
t /= 10;
}
return res;
}
  • 思路2
int reverse(int x){
std::string str = std::to_string(x);
if(str[0] == '-')
std::reverse(str.begin()+1,str.end());
else
std::reverse(str.begin(),str.end());
try{
return stoi(str);
}
catch(out_of_range ex){
return 0;
}
}

python

def reverse(self, x):
if x >= 0:
s = (int)(str(x)[::-1])
else:
s = -(int)(str(-x)[::-1])
if s >= -(2**31) and s <= (2**31)-1:
return s
else:
return 0

7. Reverse Integer[E]整数反转的更多相关文章

  1. 【LeetCode】7、Reverse Integer(整数反转)

    题目等级:Easy 题目描述: Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 O ...

  2. [LintCode] Reverse Integer 翻转整数

    Reverse digits of an integer. Returns 0 when the reversed integer overflows (signed 32-bit integer). ...

  3. 【LeetCode】7. Reverse Integer 整型数反转

    题目: Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 思路:不 ...

  4. lintcode :reverse integer 颠倒整数

    题目: 颠倒整数 将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数). 样例 给定 x = 123,返回 321 给定 x = -123,返回 -321 解题: 直接 ...

  5. [LeetCode] Reverse Integer 翻转整数

    Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 click to ...

  6. LeetCode 7. Reverse Integer 一个整数倒叙输出

    潜在问题:(1)随着求和可能精度会溢出int 范围,需要使用long 来辅助判断是否溢出,此时返回 0 Assume we are dealing with an environment which ...

  7. 007 Reverse Integer 旋转整数

    Given a 32-bit signed integer, reverse digits of an integer.Example 1:Input: 123Output:  321Example ...

  8. [LeetCode] 7. Reverse Integer 翻转整数

    Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 Examp ...

  9. LeetCode 【2】 Reverse Integer --007

    六月箴言 万物之中,希望最美:最美之物,永不凋零.—— 斯蒂芬·金 第二周算法记录 007 -- Reverse Integer (整数反转) 题干英文版: Given a 32-bit signed ...

随机推荐

  1. SQLServer 添加序号列

    select ROW_NUMBER()OVER(ORDER BY 用来排序的列的列名),XXX,XXX from XXX 按照原始顺序: ROW_NUMBER()OVER(ORDER BY (sele ...

  2. 给WordPress的TinyMCE Advanced编辑器加上中文字体

    为TinyMCE编辑器增加中文字体并不复杂,只需要将将如下代码加到当前主题的functions.php文件中最后一个?>的前面即可: 不要忘记保存,然后更新一遍浏览器即可 //为TinyMCE编 ...

  3. WinAPI使用: 时间,线程,中断

    (1):C/C++获取当前系统时间:http://www.cnblogs.com/mfryf/archive/2012/02/13/2349360.html 不过当计算算法耗时的时候,不要忘记seco ...

  4. QT线程使用收集示例

    关于多线程问题: Qt和Boost做跨平台的线程封装,OpenMP主要做并行计算,让不精通多线程的人也能高效地利用CPU的计算能力.个人倾向于用boost.thread, boost.mpi.   一 ...

  5. 六星经典CSAPP笔记系列 - 作者:西代零零发

    六星经典CSAPP笔记(1)计算机系统巡游 六星经典CSAPP笔记(2)信息的操作和表示 六星经典CSAPP-笔记(3)程序的机器级表示

  6. 动漫绘画软件优动漫PAINT最近所用文件

    在使用优动漫PAINT的时候有时候会遇到这样的问题,近期编辑的文件找不见了,或者想要接着之前的文件进行编辑,如何快速找到这些文件呢?其实在最近所用文件中一目了,本文我们一起来看看. 如果您想接着上次未 ...

  7. Javase 简单代码练习

    public class Test10 { public static void main(String[] args) { System.out.println("------------ ...

  8. Python笔记5----集合set

    1.集合的概念:无序不重复 分为可变集合(set())和不可变集合(frozenset)两种 2.创建集合 aset=set('hello') >>aset={'h','e','l','o ...

  9. 转[总结]FFMPEG视音频编解码零基础学习方法 .

    http://blog.csdn.net/leixiaohua1020/article/details/15811977 在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视 ...

  10. 【 ACM-ICPC 2018 沈阳赛区网络预赛 D】Made In Heaven

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 点可以重复走的k短路. [代码] #include <bits/stdc++.h> #define LL long lo ...