算法 - 回文数

204 阅读2分钟

题目描述

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true

示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

编程思路

1. 字符串反转法

(1) 整数转换成字符串,利用split()函数转换成数组

(2) 再利用reverse()函数,将该数组的元素反转

(3) 然后再利用join()方法将反转后的数组转换成字符串,这就形成了与整数相反的字符串了

2. 整数反转法

(1) 首先要判断x是正数还是负数

(2) 如果x是负数则返回false,因为负数的符号就是一个重要因素(后又补充x % 10 == 0 && x != 0 这一条件,因为 x % 10 == 0 && x != 0那必然是这个整数以0结尾,才能被10除净;且这是负数的情况,所以该整数不为0)

(3) 如果该整数是正数的话,则要分两种情况。当0 <= x < 10时,不论怎么反转都是本身,所以返回true。当x>10时,看代码即可明白。

代码实现

//将整数转换成字符串来解决这道算法题
var isPalindrome = function(x) {
    let str = x.toString();
    let reverseStr = x.toString().split('').reverse().join('');
    if(str == reverseStr ){
        return true;
    }else{
        return false;
    }
};

进阶

不将整数转为字符串来解决这个问题

var isPalindrome = function(x) {
    var rev = 0;
    var num = x;
    if(x<0 || (x % 10 == 0 && x != 0)){
         return false;
    }
    else{
        if(x<10){
             return true;
        }else{
            while(parseInt(x/10)){
                rev = rev * 10 + x % 10;
                x = parseInt(x/10);
                if(x <10){
                	rev = rev * 10 + x % 10;
                }
            }
        }
        if(rev == num || rev/10 == num){
            return true;
        }else{
            return false;
        }
    }
};

有更好的想法的朋友,可以留言哦!一起进步!>_<