Skip to content

回文数

589 字约 2 分钟

算法

2024-12-30

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

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

例如,121 是回文,而 123 不是。

解题思路

解法一: 1.先将给定数转换为字符串 2.获取字符串的开始索引和结束索引 3.通过while循环判断 当第一和最后一位不相等则不是回文数返回false否则直至循环结束返回true

/**
 * 检查给定的整数是否为回文数。
 * 如果一个数从左到右读和从右到左读都是一样的,那么这个数就是回文数。
 *
 * @param {number} x - 要检查的整数。
 * @return {boolean} - 如果 x 是回文数则返回 true,否则返回 false。
 */
var isPalindrome = function (x) {
  // 将整数转换为字符串
  let str = x.toString();
  // 获取字符串的长度
  let len = str.length;
  // 初始化两个指针,一个指向字符串的开头,一个指向字符串的结尾
  let i = 0;
  let j = len - 1;
  // 从字符串的两端向中间遍历
  while (i < j) {
    // 如果两个指针所指的字符不相等,那么这个字符串就不是回文数
    if (str[i] !== str[j]) {
      // 返回 false
      return false;
    }
    // 两个指针向中间移动一步
    i++;
    j--;
  }
  // 如果遍历完整个字符串都没有发现不相等的字符,那么这个字符串就是回文数
  return true;
};

解法二: 1.设置一个和标记 2.将给定值转字符串 3.循环字符串的一半通过字符串的charAt()方法判断开始是否等于结束 不等于返回false否则返回true

var isPalindrome = function(x) {
    // 设置一个标记,默认 true
  
    x<0 ? flag = false: flag = true;
    // 先将数字转换为字符串
    let str = x.toString()
    switch(str.lengt) {
        case 1:
            flag = true
            break;
        case 2:
            str[0] === str[1] ? flag = true:flag = false
            break;
        default:
            for(let i =0; i<str.length/2;i++) {
                    // charAt() 方法可返回指定位置的字符。 
                    // 判断索引第一个位置的字符等不等于最后一个位置的字符
                    // 不等于则不是回文数,标记为false
                if(str.charAt(i) !== str.charAt(str.length-1-i)) {
                        flag = false
                        // 不相等直接退出循环
                        break;
                }
            }
            break;
    
    return flag
};