Reverse Integer

Reverse digits of an integer.

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

click to show spoilers.

Have you thought about this?

Here are some good questions to ask before coding. Bonus points for you if you have already thought through this!

If the integer's last digit is 0, what should the output be? ie, cases such as 10, 100.

Did you notice that the reversed integer might overflow? Assume the input is a 32-bit integer, then the reverse of 1000000003 overflows. How should you handle such cases?

For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

我比较认可的做法:

比较简洁,没有涉及到将整型转化为字符串,所以也不用特别处理正负的问题。
class Solution {
public:
int reverse(int x) {
int result=0;
do{
if((result>214748364)||(result<-214748364))
return 0;
result*=10;
result+=(x%10);
}while(x=x/10);
return result;
}
};

或:

class Solution {
public:
int reverse(int x) {
double res = 0;
while (x){
res = res * 10 + x % 10;
x = x / 10;
}
return (res > INT_MAX || res < INT_MIN) ? 0 : res;
}
};

看看几种其他的做法,拓展:

1、

class Solution {
public:
int reverse(int x) {
int flag = 0;
if(x < 0)
{
flag = 1;
x = abs(x);
}
string num;
while(x)
{
num += x%10 + '0'; //'0'是空,字符串的结尾处用
x /= 10;
}
int revx = 0;
revx = std::atoi(num.c_str());
if(revx%10 != (num[num.size() -1]-'0'))  //判断溢出
return 0;
if(flag)
revx = 0-revx;
return revx;
}
};

注:atoi()函数原型为: int atoi(char *str),用途是将字符串转换成一个整数值,str是待转化成整数值的字符串.成功则返回转化后的整数值,失败返回0.

c_str()函数原型为:const char *c_str(),如果要将string对象,转化为char*对象,c_str()提供了这样一种方法,它返回一个客户程序可读不可改的指向字符数组的指针。

2、

class Solution {
public:
int reverse(int x) { std::string s = std::to_string(x);//to_string函数--int to string
stringstream m;
int s1;
int d;
int begin=;
if (s[]=='-'){
begin++;
}
int k=s.length()+begin;
for(int i=begin;i<k/;i++)  //左右两边对换
{
s1=s[i];
s[i]=s[k--i];
s[k--i]=s1;
}
m<<s;//向流m中传值
m>>d;//向d中写入值 if (d<=- || d>=){
return ;
}
return d;
}
};

注:http://blog.163.com/chen_dawn/blog/static/11250632010111215937586/   中可详见c++stringstream的用法。

Palindrome Number

Determine whether an integer is a palindrome. Do this without extra space.

Some hints:

Could negative integers be palindromes? (ie, -1)

If you are thinking of converting the integer to string, note the restriction of using extra space.

You could also try reversing an integer. However, if you have solved the problem "Reverse Integer", you know that the reversed integer might overflow. How would you handle such case?

There is a more generic way of solving this problem.

回文数:      将这个数的数字按相反的顺序重新排列后,所得到的数和原来的数一样。

分析:首先想到,可以利用上一题,将整数反转,然后与原来的整数比较,是否相等,相等则为 Palindrome 的。可是 reverse() 会溢出。

正确的解法是,不断地取第一位和最后一位(10 进制下)进行比较,相等则取第二位和倒数第 二位,直到完成比较或者中途找到了不一致的位。

class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) return false;//负数显然不是回文数
int p1 = 0, p2 = x;
while (p2 > 0) {
p1 = p1*10 + p2%10;
p2 /= 10;
}
return p1 == x;
}
};

或:

class Solution {
public:
bool isPalindrome(int x) {
if(x<0)
return false;
int z=x;
long y=0;
while(z!=0)
{
y=y*10+z%10;
z=z/10;
}
if(y>INT_MAX || y<INT_MIN || x!=y)
return false;
else
return true;
}
};

leetcode:Reverse Integer 及Palindrome Number的更多相关文章

  1. 65. Reverse Integer && Palindrome Number

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

  2. Leetcode 题目整理-3 Palindrome Number & Roman to Integer

    9. Palindrome Number Determine whether an integer is a palindrome. Do this without extra space. clic ...

  3. 【LeetCode算法-9】Palindrome Number

    LeetCode第9题 Determine whether an integer is a palindrome. An integer is a palindrome when it reads t ...

  4. 【LeetCode】9、Palindrome Number(回文数)

    题目等级:Easy 题目描述: Determine whether an integer is a palindrome. An integer is a palindrome when it rea ...

  5. LeetCode(9)Palindrome Number

    题目: Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could neg ...

  6. leetCode练题——9. Palindrome Number

    1.题目 9. Palindrome Number   Determine whether an integer is a palindrome. An integer is a palindrome ...

  7. LeetCode: Reverse Integer 解题报告

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

  8. 【LeetCode算法题库】Day3:Reverse Integer & String to Integer (atoi) & Palindrome Number

    [Q7]  把数倒过来 Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Outpu ...

  9. leetcode reverse integer&&Palindrome Number

    public class Solution { public int reverse(int x) { int ret=0; while(x!=0) { int t=x%10; ret=ret*10+ ...

随机推荐

  1. ORB-SLAM2(1) Linux下配置和编译

    ORB-SLAM2 官网:https://github.com/raulmur/ORB_SLAM2 配置教程:http://blog.csdn.net/zzlyw/article/details/54 ...

  2. 使用RMAN Active duplicate创建异地auxiliary Database

    1g的RMAN duplicate 可以通过Active database duplicate和Backup-based duplicate两种方法实现.这里的测试使用的是Active databas ...

  3. eureka client服务续约源码分析

    必备知识: 1.定时任务 ScheduledExecutorService public class demo { public static void main(String[] args){ Sc ...

  4. scrapy实验1 爬取中国人寿官网新闻,保存为xml

    一.scrapy 实验  爬中国人寿新闻,保存为xml 如需转发,请注明出处:小婷儿的python  https://www.cnblogs.com/xxtalhr/p/10517297.html 链 ...

  5. linux简单的安全防护

    注: 1.该脚本是以centos7.4.1708做的 2.函数jia/jian是加权限/减权限 3.改过密码以后,下次使用新创建的用户登录时将提示更改密码,第一次要输入原始的密码,原始密码改脚本中定义 ...

  6. git lg 配置

    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d ...

  7. zookeepeer4字命令实践

    环境 leader:192.168.116.143 fllower:192.168.116.142 fllower:192.168.116.144 命令:conf——查看其他主机的配置文件 [root ...

  8. Luogu P1477 [NOI2008]假面舞会

    一道非常神奇的图论题解法无比新奇清新 我们首先把图分成三种情况: 有环的,此时答案一定是环长的因数(否则不能满足题意) 存在入度大于1的DAG图的 一棵树/一条链 很容易发现,最后一种情况想怎么取就怎 ...

  9. EZ 2018 06 17 NOIP2018 模拟赛(十九)

    这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...

  10. [Spark][python]从 web log 中提取出 UserID 作为key 值,形成新的 RDD

    针对RDD, 使用 keyBy 来构筑 key-line 对: [training@localhost ~]$ cat webs.log 56.31.230.188 - 90700 "GET ...