题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1: 输入: 121 输出: true
示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
- 常规解法:先反转再和原数做比较
bool isPalindrome(int x){
int num = x;
long res = 0; //注意这里要用long类型的数,有些不是回文数最后的数字可能很大
if(x == 0) return true;
else if(x < 0) return false;
else{
while(num > 0){
res = res * 10 + num % 10;
num = num / 10;
}
if(res == x) return true;
else return false;
}
}
//JS
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
if(x < 0) return false;
let num = x, res = 0;
while(num != 0){
res = res * 10 + num % 10;
num = Math.floor(num / 10);
}
if(res != x) return false;
return true;
};
//数字转换成字符串后再双指针遍历
var isPalindrome = function(x) {
if(x < 0) return false;
let str = "";
str += x;
for(let i = 0, j = str.length - 1; i < j; i++, j--)
if(str[i] != str[j]) return false;
return true;
};
补充:判断字符串是否是回文串
- 空间换时间:从尾到头将字符串a赋值给字符串b,再从头开始比较a和b,全部相同则是回文
int isPalindrome1()
{
int j,i,n;
char a[999],b[999];
printf("Please input string: ");
scanf("%s",a); //输入字符串
n=strlen(a); //用strlen函数读取字符串长度(长度到 停止)
for(i=0,j=n-1;i<n;i++,j--) //循环将字符串a逆序赋值给b
b[j]=a[i];
for(i=0;i<n;i++)
{
if(b[i]!=a[i])
break; //判断是否回文
}
if(i==n) printf("是一个回文数!
"); //如果从第1位到n都相同 则输出回文数
else printf("不是一个回文数!
");
return 0;
}
- 第i个位置上的字符和第n-1-i位置上的字符做比较
int isPalindrome2(char *str)
{
int i,n=0,fg=1; //设置标志位
char *p=str;
while(*p){ //将指针p置位到字符串末尾,并统计字符数
n++;
p++;
}
for(i=0;i<n/2;i++){ //循环比较字符
if(str[i]!=str[n-1-i]){
fg=0;
break;
}
}
return fg;
}