【LeetCode刷题】- C++-简单-9回文数

Task:

【LeetCode刷题】- C++-简单-9回文数_第1张图片

思路:

  • 边界检查:看题目,首先是边界检测:

从例子以及题目要求看出:
1.负数是不行的;
2.末尾是0的但是这个数字又不是0的数字是不行的(因为末尾是零的回文数字只有它自己!)
所以排除,是上面这两样的就直接返回false!

  • 算法:

既然有了上面的建设而且昨天刷了整数翻转的题目,那就考虑把给定的数的一半给反过来,如果这个反过来的一半的数字和留下来的另外一半相当,那就是回文数字,如果不相等,那就不是;
这里有两个比较需要着重考虑的地方:
1.如何判断已经返回了一半呢?
回答:因为构成返回的数字的时候,是需要给每次的反了的数字乘以10的,那么当这个反了的数字大于剩下的x的时候,就说明已经进行了一半,所以作为循环的判定条件!
2.奇偶数对结果的影响?
回答:当给定的数是偶数的时候,那刚好就这样了,直接对比;当给定的数是奇数的时候,那就给这个我们反过来的一半的数整除10,去掉它的最中间的那一位,这样也就不会影响两半数字的对比了!
下面看代码!

代码:

class Solution {
public:
    bool isPalindrome(int x) {
        if(x <0 || x % 10 ==0 && x!=0) return false;
        
        int revertedNumber = 0;
        while( x > revertedNumber){   
            revertedNumber = 10 * revertedNumber + x % 10;
            x /= 10;        
        }
    
        return x == revertedNumber || x == revertedNumber / 10;
                
    }
};

提交结果:

【LeetCode刷题】- C++-简单-9回文数_第2张图片

你可能感兴趣的:(C/C++学习,leetCode,LeetCode刷题系列)