Skip to content

Latest commit

 

History

History
92 lines (71 loc) · 2 KB

2019-07-25.md

File metadata and controls

92 lines (71 loc) · 2 KB

毎日一题 - 9. Palindrome number

信息卡片

题目描述

Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.

Example 1:

  Input: 121
  Output: true

Example 2:

  Input: -121
  Output: false
  Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.

Example 3:

  Input: 10
  Output: false
  Explanation: Reads 01 from right to left. Therefore it is not a palindrome.

Follow up:

  Coud you solve it without converting the integer to a string?

参考答案

转成字符串方式

  1. 负数都是非回文数,10的整数倍不是回文。
  2. 将数字转为字符串,再逆序排列字符串。两者比较,相等就是回文数。

直接操作整数方式

  1. 复制x到temp;
  2. 取temp末尾数字,方式为temp与10的求余;组成新数reverse;
  3. 每取完一位,temp缩小10倍并且去掉小数。
  4. reverse要先扩大十倍再加上取下来的数
  5. 当temp === 0时,表示已经取完;reverse与x比较

参考JavaScript代码:

/**
 * @param {number} x
 * @return {boolean}
 * 转成字符串
 */
var isPalindrome = function(x) {
    if(x < 0 ) return false;
    if(x === 0) return true;
    if(x % 10 === 0) return false;
    let reverse = '';
    let str = String(x);
    for(let i = str.length - 1; i >= 0; i--) {
      reverse += str[i]
    }
    return str === reverse
};

/**
 * @param {number} x
 * @return {boolean}
 * 不转成字符串
 */
var isPalindrome = function(x) {
    if(x < 0 ) return false;
    if(x === 0) return true;
    if(x % 10 === 0) return false;
    let temp = x;
    let reverse = 0;
    while(temp > 0) {
      let num = temp % 10;
      temp = (temp - num)/10; // 或 temp = (temp / 10) >> 0,去除小数位
      reverse = reverse * 10 + num
    }
    return x === reverse
};

优秀解答

暂缺