9.回文数

题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 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函数读取字符串长度(长度到\0停止) 
    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("是一个回文数!\n");     //如果从第1位到n都相同 则输出回文数 
    else printf("不是一个回文数!\n"); 
    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;
}

  

 

posted @ 2020-05-22 17:56  Jessey45  阅读(200)  评论(0编辑  收藏  举报