目录
0. 题目描述
1. 解题分析
(1)思路还是比较直接简单:
不使用字符串的话,那就提取数位,然后进行判断。
#include<iostream>
#include<vector>
bool isPalindrome(int x) {
if (x < 0) {
return false;
}
if (x < 10) {
return true;
}
vector<int> judge;
while (x > 0) { //提取每一个数位
judge.push_back(x % 10);
x /= 10;
}
int middle = (judge.size() - 1) / 2;
if (judge.size() % 2 != 0) { //如果数位为奇数
for (int i = 1; i <= middle; i++) { //以中间数字为对称轴,逐个向两边对比
if (judge[middle - i] != judge[middle + i]) {
return false;
}
}
return true;
} else { //如果数位为偶数
for (int i = 0; i < middle + 1; i++) { //从中间数字开始,逐个向两边对比
if (judge[middle - i] != judge[middle + i + 1]) {
return false;
}
}
return true;
}
}
复杂度分析
-
时间复杂度 O(n)。
-
空间复杂度 O(n) 。
测试用时204ms,优于43%左右的提交。