[LeetCode]9. Palindrome Number
题目描述
思路1
遍历一次,栈保存前1/2, 后1/2比较
代码1
bool isPalindrome(
int x) {
string num =
std::to_string(x);
stack<char> s;
bool res =
true;
int len = num.size(), flag =
floor(len /
2);
for (
int i =
0; i < len; ++i){
if (len %
2 && i == flag)
continue;
if (i < flag){
s.push(num[i]);
}
else{
if (s.top() != num[i]) {
res =
false;
break;
}
s.pop();
}
}
return res;
}
思路2
不需要栈,遍历1/2即可
代码2
bool isPalindrome(
int x) {
string num = std::to_string(x);
bool res =
true;
int len = num.size(), flag = floor(
len /
2);
for (
int i =
0; i < flag; ++i){
if (num[i] != num[
len - i -
1]){
res =
false;
break;
}
}
return res;
}
思路3
考虑空间复杂度要求O(1)
代码3
bool isPalindrome(
int x) {
int len = (
int)(
log(x) /
log(
10) +
1), mid = (
floor)(len /
2);
int res =
0,
source = x;
for (
int i =
0; i < mid; ++i){
res += (x %
10) *
pow(
10, i) + (x %
10) *
pow(
10, len - i -
1);
x = x /
10;
}
if (len %
2){
res += (x %
10) *
pow(
10, mid);
}
return res ==
source;
}
思路4
考虑空间复杂度基础上优化时间
代码
bool isPalindrome(
int x) {
if (x <
0 || x && x %
10 ==
0)
return false;
int sum =
0;
while (
sum < x){
sum =
sum *
10 + x %
10;
x /=
10;
}
return sum == x || x ==
sum /
10;
}
转载请注明原文地址: https://ju.6miu.com/read-14665.html