难度:简单

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

    示例:

    1. 示例 1:
    2. 输入: 121
    3. 输出: true
    4. 示例 2:
    5. 输入: -121
    6. 输出: false
    7. 解释: 从左向右读, -121 从右向左读, 121- 。因此它不是一个回文数。
    8. 示例 3:
    9. 输入: 10
    10. 输出: false
    11. 解释: 从右向左读, 01 。因此它不是一个回文数

    进阶: 你能不将整数转为字符串来解决这个问题吗?

    思路分析
    字符串反转:

    1. 将传入的值分割为数组
    2. 将转换后的字符串和反转后的字符串做比较

    二分对比法:

    1. 将原整数分成前后两部分
    2. 从最后一位数字开始取出直到一半
    3. 原数字不断/10抛弃最后一位,新数字不断乘以10 直到反转后的数大于原数 即可判断到了一半
    4. 奇数数字/10 == 反转数字 || 偶数数字 == 反装数字 => 是回文数

    代码实现

    1. // 字符串反转
    2. var isPalindrome = function(x) {
    3. let str = x.toString().split("")
    4. return str.join() === str.reverse().join()
    5. };
    6. // 二分对比法
    7. var isPalindrome = function(x){
    8. if(x<0 || (x%10 == 0 && x!=0)){
    9. return false;
    10. }
    11. var reverseNumber = 0;
    12. while(x>reverseNumber){
    13. reverseNumber = reverseNumber*10 + x%10;
    14. x = parseInt(x/10);
    15. }
    16. return x == reverseNumber || x == parseInt(reverseNumber/10)
    17. }
    18. // 中心扩展法
    19. var isPalindrome = function(x){
    20. var middle = parseInt(x.length/2)
    21. var left = middle-1,right = middle+1;
    22. while(left>=0 && right<x.length){
    23. if(x[left] != x[right]){
    24. return false;
    25. }
    26. left--;
    27. right++;
    28. }
    29. return true;
    30. }