1 题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
2 解法
2.1 初版
2.1.1 思路
由于题目不允许把数直接转化为字符串, 所以想到了把数的每一位转换为双向数组, 然后对头尾一点一点比较
2.1.2 代码
bool isPalindrome(int x) {if (x < 0) {return false;}deque<int> tDeque;while (x) {tDeque.push_back(x % 10);x /= 10;}while (tDeque.size() > 1) {int front = tDeque.front();int back = tDeque.back();if (front == back) {tDeque.pop_front();tDeque.pop_back();} else {return false;}}return true;}
2.1.3 结果
性能属实不咋地:
2.2 第二版
2.2.1 思路
pop出来是不是费性能, 所以直接用vector, 不pop了
2.2.2 代码
bool isPalindrome(int x) {if (x < 0) {return false;}vector<int> tVec;while (x) {tVec.push_back(x % 10);x /= 10;}int left = 0;int right = tVec.size() - 1;while (left < right) {if (tVec[left] == tVec[right]) {left ++;right --;} else {return false;}}return true;}
2.2.3 结果
这还不如之前的呢......
2.3 答案解法
2.3.1 思路
只翻转一半, 也就是说如果后一半翻转之后与剩下的前一半看看是否相等.
2.3.2 代码
bool isPalindrome(int x) {if (x < 0 || (x > 0 && x % 10 == 0)) {return false;}int reverseNumber = 0;while (reverseNumber < x) {reverseNumber = reverseNumber * 10 + x % 10;x /= 10;}if (reverseNumber > x) {reverseNumber /= 10;}return (reverseNumber == x);}
2.3.3 性能
也不咋地