• [Leetcode]9. 回文数


    1.题目描述:

    难度:简单
    描述
    给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

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

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

    示例 1

    输入:x = 121
    输出:true
    
    • 1
    • 2

    示例 2

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

    示例 3

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

    提示

    -231 <= x <= 231 - 1

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

    2.分析过程

    方法:反转整数法。即取整取余按位乘十法

    1. 用目标值对10取余提取末尾数字
    2. 把目标值对10取整来去掉末尾数字
    3. 将上一个取到的末尾数字乘以10,加上新的末尾数字

    依次类推,实现整数的反转,然后对比即可。

    3.解题过程

    方法1:反转整数法

    根据分析过程中反转整数的思路,实现以下代码:

    class Solution {
        public boolean isPalindrome(int x) {
            if(x<0){
                return false;
            }
            //121 545 12021
            int taget = x;
            int revert = 0;
            while(taget>0){
                revert = revert * 10 + taget%10;
                taget = taget/10;
            }
            if (revert == x){
                return true;
            }
            return false;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    方法2:反转一半整数法

    进一步优化:考虑可能出现超出整数范围的可能,因此采用反转一半整数的方法进行求解:

    class Solution {
        public boolean isPalindrome(int x) {
            // x为负数,或者个位数是0时 不是回文数
            if(x < 0 || (x % 10 == 0 && x != 0)){
                return false;
            }
            //121 545 12021
            //反转一半的数字
            int revert = 0;
            while(x > revert){
                revert = revert * 10 + x % 10;
                x = x / 10;
            }
            //位数为偶数适用第一个条件,位数为奇数适用第二个条件
            return revert == x || x == revert/10;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    注意:这里需要单独考虑个位数字为0的情况。

  • 相关阅读:
    JVM 优化技术
    掌握优先级队列:提升效率的关键技巧
    做副业的一些想法
    油气管道系统安全状态监测技术研究进展
    CPS攻击案例(一)——基于脉冲宽度调制PWM的无人机攻击
    Navicat 查询创建工具 | 设置分组准则 - Part 5
    2023年安全员-C证证模拟考试题库及安全员-C证理论考试试题
    用Python和TensorFlow实现图像分类:从零开始
    ElasticSearch之搜索词提示Sug
    基于SpringBoot的校园失物招领系统
  • 原文地址:https://blog.csdn.net/zhang_java_11/article/details/125477451