leetcode 9 回文数

Posted xiying159

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 9 回文数相关的知识,希望对你有一定的参考价值。

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

示例 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 回文数的主要内容,如果未能解决你的问题,请参考以下文章

leetCode第9题——回文数

LeetCode 9. 回文数

leetcode 9

LeetCode Golang 9.回文数

[LeetCode]9. 回文数

leetcode 9 回文数