7. Reverse Integer

7. Reverse Integer_第1张图片
反转整型数字

Reverse digits of an integer.

![Uploading 007_553011.jpg . . .]

Example1: x = 123, return 321
Example2: x = -123, return -321

Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.


大致意思:反转整型数字。输入一个32位的有符号整型,你的函数应该返回0当整型数字溢出时。

常规解法:这道题虽然简单,但是很容易出错。大家可能会想到的常规解法,就是先将整型数转换成字符串,反转后再转换成整型,但是这种方法有个小问题就是当遇到一个长度为10的整型数,如果个位数很大,正向不溢出,反转后可能溢出,那么结果就会出错的。当然也有对应的解决策略,就是最后接收反转后的整型数的变量声明为long,这样就可以解决这个问题了,当然需要进行溢出判断,只要超过int型的数就返回0。

class Solution {
public:
    int reverse(int x) {
        stringstream stream;
        stream<>y;
        if(y>INT_MAX || y

代码解释:因为在leetcode中没有C语言的一些库文件,string和int之间的转换函数不会被识别,我们可以采用c++中的流转换。先把这两种方法单独列出来,以后还会经常用。

1、int转string:

int a=10;
string st;
stringstream stream;
stream<

2、string转int:

string st="10";
int a;
stringstream stream(st);
stream>>a;

其他解法:每次对整型数进行余10操作,这样每次操作后得到的都是原整型数的个位、十位、百位..等等,然后通过数学运算,可以将整型数通过运算实现反转。反转乘加操作过程的倒数第二步就可以进行溢出判断,因为如果倒数第二步都溢出,乘10以后肯定还是溢出。这个方法不用转换成字符串,比较适合。

class Solution {
public:
    int reverse(int x) {
        int t,y=0;
        while(x!=0)
        {
            t=x%10;
            if(y>INT_MAX/10 || y

你可能感兴趣的:(7. Reverse Integer)