• [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的情况。

  • 相关阅读:
    (附源码)计算机毕业设计SSM基于的在线怀旧电影歌曲听歌系统
    共享日志。 vCorfu: A Cloud-Scale Object Store on a Shared Log
    锐捷AC开启SSH
    Spring Framework 6.0 框架
    Python简直是万能的,这5大主要用途你一定要知道!
    Apache Shiro 配置
    软件测试——版本管理工具:SVN和Git
    01-Spring中事务的实现之编程式事务和声明式事务,以及事务的属性之传播行为,隔离级别,事务的回滚
    zk羊群效应怎么处理
    TCP/IP协议、HTTP协议
  • 原文地址:https://blog.csdn.net/zhang_java_11/article/details/125477451