Skip to content

Latest commit

 

History

History
67 lines (51 loc) · 2.03 KB

20200509-回文数.md

File metadata and controls

67 lines (51 loc) · 2.03 KB

每天一道leetCode

信息卡片

题目描述

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

示例 1:

输入: 121
输出: true
示例 2:

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

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

参考答案

分析

  • 本题如果将数字转换成字符串是十分简单的,但是使用字符串会造成不必要的内存使用,因此考虑直接根据数字判断
  • 首先。如果是负数的话,是不可能为回文数的,可以直接返回;同理,如果除0之外的数,如果末位为0也不可能为回文数,可以直接返回

逐一判断

  • 思路:首先判断数字有多少位,然后按照和字符串类似的方法通过%和/位数的方法获得首尾的数字逐一判断

取出后半段数字进行翻转

  • 思路:
  • 需要注意的一个点就是由于回文数的位数可奇可偶,所以当它的长度是偶数时,它对折过来应该是相等的;
  • 当它的长度是奇数时,那么它对折过来后,有一个的长度需要去掉一位数(除以 10 并取整)
  • 如果判断是否取了一般数字呢?
  • 将原始数字除以 10,然后给反转后的数字乘上 10,所以,当原始数字小于反转后的数字时,就意味着我们已经处理了一半位数的数字。
class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }
        int reverseNum = 0;
        while(x > reverseNum) {
            reverseNum = reverseNum * 10 + x % 10;
            x = x / 10;
        }
        return x == reverseNum || x == reverseNum / 10;
    }
}

其他优秀解答

暂无