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)吧。

浙公网安备 33010602011771号