Leetcode|Reverse Integer(string转char*总结)

原创 2015年07月11日 10:05:52

Reverse digits of an integer.

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

解法1:
思路是转化为字符串。溢出的判断要进行字符串比较;这里string类型不能直接用strcmp;如果想用的话,需要类型转换。
下面我会说明到底怎么比较字符串。

int strcmp(const char str1, const char* str2);*
其中str1和str2可以是字符串常量或者字符串变量,返回值为整形。返回结果如下规定:
①str1小于str2,返回负值或者-1;
②str1等于str2,返回0;
③str1大于str2,返回正值或者1;
strcmp函数实际上是对字符的ASCII码进行比较,实现原理如下:首先比较两个字符串的第一个字符,若不相等,则停止比较并得出两个ASCII码大小比较的结果;如果相等就接着比较第二个字符然后第三个字符等等。无论两个字符串是什么样,strcmp函数最多比较到其中一个字符串遇到结束符’\0’为止,就能得出结果。
如果用strcmp,我们将string转换为char .最好是const char.

string转换为char* 有三种方法:
string tmp;
char p=(char)tmp.data();//不加char*问题不大。
char *p=tmp.c_str();
char p[15];tmp.copy(p,tmp.size(),0);p[tmp.size()]=0;//末尾加上’\0’; 下面题目的tmp长度不会超过10个。

直接用string的特性比较(两种方法):
tmp.compare(“2147483649”);返回的是正数,负数和0;
tmp>”2147483649”;返回的true和false;
代码如下:

int reverse(int x) {
        string tmp;
        bool neg=x<0?true:false;
        unsigned int t=x<0?-x:x;//不能用long long 定义t,否则对于INT_MIN,去相反数仍然为INT_MIN,负号一直有。
        stringstream ss;
        for(;t!=0;t/=10){
            char tt=t%10+'0';
            ss<<tt;
        }
        tmp=ss.str();
        if(tmp.size()==10&&(tmp.compare("2147483648")>0||(!neg&&tmp.compare("2147483647")>0))) return 0;//用compare函数
        //remove zero
        int i=0;
        for(;tmp[i]=='0';i++);
        int res=0;
        for(;i<tmp.size();i++){
            res=res*10+(tmp[i]-'0');
        }
        return neg?-res:res;
    }

上题有两点需要注意:
1,判断溢出时候,比较字符串,先确定长度是10。不然输入123也返回0了。
2,INT_MIN变为正数的时候,用unsigned int.

解法2:
直接在int下操作。无需转换字符串。注意溢出条件。
INT_MAX不能随便减去一个负数,INT_MIN 也不能随便减去一个正数。

int reverse(int x){
    int y=0;
    for(;x!=0;x/=10){
        int n=x%10;
        if(y>INT_MAX/10||y<INT_MIN/10) return 0;//减去n就溢出了
        y=y*10+n;
    }
    return y;
}

上面溢出条件其实应该是:
y*10+n>INT_MAX||y*10+n

版权声明:本文为博主原创文章,未经博主允许不得转载。

[LeetCode] 007. Reverse Integer (Easy) (C++/Java/Python)

[LeetCode] 007. Reverse Integer (Easy) (C++/Java/Python)
  • hcbbt
  • hcbbt
  • 2015年02月28日 00:17
  • 2903

LeetCode7——Reverse Integer

Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 大意 反转i...
  • booirror
  • booirror
  • 2015年01月26日 11:21
  • 2619

【LeetCode-Algorithm】【7-Reverse Integer】【Python】

Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 click ...
  • IFollowRivers
  • IFollowRivers
  • 2016年09月20日 19:04
  • 837

LeetCode(7) Reverse Integer

本题比较简单,也比较坑爹, Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return...
  • feliciafay
  • feliciafay
  • 2013年12月04日 02:02
  • 7803

Leetcode-541. Reverse String II

前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发CSDN...
  • mcf171
  • mcf171
  • 2017年03月12日 12:28
  • 1273

Reverse Integer -- LeetCode

原题链接: http://oj.leetcode.com/problems/reverse-integer/  这道题思路非常简单,就是按照数字位反转过来就可以,基本数字操作。但是这种题的考察重点并不...
  • linhuanmars
  • linhuanmars
  • 2014年02月27日 05:39
  • 13974

[Leetcode]-Reverse Integer

//如果有pow函数,Linux下编译一定要加-lm //gcc ReverseInteger.c -o ReverseInteger -lm 关键:一定要注意操作过程中int类型超界 ...
  • xiabodan
  • xiabodan
  • 2015年06月28日 21:09
  • 678

LeetCode::Reverse Integer C语言

题目 Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 ...
  • u013300875
  • u013300875
  • 2015年03月07日 21:00
  • 1164

Leetcode 7 Reverse Integer 反转数字

题目: Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return ...
  • vvaaiinn
  • vvaaiinn
  • 2015年04月20日 10:28
  • 4659

[C++]LeetCode 7:Reverse Integer(翻转整数)

Problem: Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321...
  • emmaalways
  • emmaalways
  • 2015年05月02日 14:23
  • 1163
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Leetcode|Reverse Integer(string转char*总结)
举报原因:
原因补充:

(最多只允许输入30个字)