LeetCode 09 回文数

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例: 0-9 回文
        1221 回文
        18681 回文
 
暴力解法:
class Solution {
public:
    bool isPalindrome(int x) {
     //负数不是回文
if(x<0) { return false; }
     //0为回文
if(x==0) { return true; }
     //取余数,剩余除数
int remainder = x % 10; int divisor = (x - remainder)/10; vector<int> numVec;

     //10的倍数不存在回文可能
if(remainder==0 && divisor!=0) { return false; } else {
       //数字拆分存储至vector<int> numVec.push_back(remainder);
while(divisor!=0) { remainder = divisor % 10; numVec.push_back(remainder); divisor = (divisor - remainder)/10; }
       //遍历check是否首尾对应,比对一半就行,但是查找中间变量还要多几行代码
int size = numVec.size(); for(int i=0; i<size; i++) { if(numVec[i]!=numVec[size-i -1]) { return false; } } } return true; } };

大神解法:

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 10 && x >= 0) return true;
        if (x < 0 || x % 10 == 0) return false;
        int val = 0;
        for (; val * 10 <= x; x /= 10) //构造x的前半段与后半段, 前半段为x, 后半段为val
            val = val * 10 + x % 10;
        return (val == x || (val > 9 && val / 10 == x));
    }
};

总结:啊!我写这么多行才能解决问题,别人几行代码就把问题解决了。而且我刚开始并没有考虑到0的判断情况,还纠结了一会要不要只遍历一半。我对这块根本就不懂啊,遍历一半和全遍历,复杂度应该都是O(n)吧。

posted @ 2020-09-19 17:54  Woniu蜗牛  阅读(101)  评论(0)    收藏  举报