码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 9 回文数

时间:2019-10-31 21:45:53      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:数位   著作权   整数   问题   输出   统计   解释   pre   网络   

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true
示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:

你能不将整数转为字符串来解决这个问题吗?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

用之前回文字串的思路可以轻松解决。(倒置一下相等就可以了)

用数字的话考虑几种情况:

1.负数,必为false;

2.零,必为true;

3.正数,可以先统计一遍个数,然后通过统计的值来取最高位和最低位这样一位位比。

*要注意的越界问题。如果乘10乘10的向上乘,在只有1位数的时候乘个10就会产生越界。

public:
    bool isPalindrome(int x) {
        if(x<0) return false;//负号必不回文
        if(x<10) return true;//个位数必定回文
        int cur=1;//用于除最高位
        int y=x;
        while(y>=10)
        {
            y/=10;
            cur*=10;
        }
        int curup=1;//用于取最低位
        while(cur>=10)
        {
            if((x/cur)%10!=(x/curup)%10) return false;//对应高低位不等,则不回文
            cur/=10;
            curup*=10;
        }
        return true;//全都相等,则回文
    }
};

 

看了眼题解。把数的后半部分反过来然后与前半部分比相等就可以了……奇数位中间的数字不影响回文

y=0;
while x>y
  y=y*10+x%10
  x/=10
if x==y || x==y/10
  return true

leetcode 9 回文数

标签:数位   著作权   整数   问题   输出   统计   解释   pre   网络   

原文地址:https://www.cnblogs.com/xiying159/p/11773835.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!