一、介绍
1.题目描述
题目链接:https://leetcode-cn.com/problems/palindrome-number/
Given an integer x, return true if x is palindrome integer.
An integer is a palindrome when it reads the same backward as forward. For example, 121 is palindrome while 123 is not.
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
2.测试样例
121 # true
-121 # false
-10 # false
-101 # false
二、题解
1、字符串
① 将输入的数字看作字符串
② 第0位和最后一位字符相同,第1位和倒数第二位字符相同......
③ 一旦不同,则不是回文数
class Solution {
public:
bool isPalindrome(int x) {
// x 转换为字符串
string str=to_string(x);
int n=str.length();
// 两面夹击,不相同返回false
for(int i=0;i<n/2;i++){
if(str[i]==str[n-i-1]) continue;
else{ return false;}
}
return true;
}
};
2、数学
① 当 x = 0,必为 true ; 当 x < 0 ,必为 false
② 将数字按位倒叙存储,定义数组a (由于数字长度不会大于10,所以创建a [10])
【可参考习题 LeeCode_7.整数反转(边界条件)】
i | 0 | 1 | 2 | 3 |
x | 123 | 123/10=12 | 1 | 0 |
a[10] | [] | 123%10=3,[3] | [3,2] | [3,2,1] |
③ 同字符串对比方式,头尾比对,向中间靠拢,出现不同的数字即返回 false
class Solution {
public:
bool isPalindrome(int x) {
if(x==0) return true;
if(x<0) return false;
int n,yu,i=0;
int a[10];
while(x!=0){
a[i++]=x%10;
x/=10;
}
for(int j=0;j<i/2;j++){
if(a[j]!=a[i-j-1]) return false;
}
return true;
}
};