【Java面试手册-算法篇】给定一个数字,请判断是否为回文数字?

在回答这个问题之前,首先得清楚什么是回文数字,回文数字有什么特征。

回文数字:设n是一任意自然数,若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。通俗地说,回文数字类似于我们在数学上学习的轴对称图形,比如111、12321是回文数,而1234不是回文数,小数没有回文数。

了解了回文数字的定义之后,对于特殊情形的数字可以直接得出结论,比如:

  • 负数不是回文数,因为负数前有负号 – ;
  • 小数没有回文数;
  • 除0外,个位数为0的数字不是回文数;
  • 0-9都是回文数字;

如何通过代码实现呢?常见的思路有两种:

  • 把数字反转,比较反转后的数字与原数字是否相等(需要注意反转后的数字范围溢出问题);
  • 把数字转换为字符串,通过比较字符来判断是否为回文数;

示例1— 数字反转

    private static boolean isPalindrome(int number) {
        if (number < 0) {
            return false;
        }

        int tmpNumber = number;
        long reversedNumber = 0;
        while (tmpNumber != 0) {
            reversedNumber = reversedNumber * 10 + (tmpNumber % 10);
            tmpNumber = tmpNumber / 10;
        }

        return reversedNumber == number;
    }

其中反转数字reversedNumber采用long型,避免数字反转后范围溢出,比如int最大值为2147483647,正常反转后的值是7463847412,但是已经超出了int的范围。

示例2 — 数字转换为字符串

    private static boolean isPalindrome(int number) {
        String numStr = String.valueOf(number);

        int low = 0;
        int high = numStr.length() - 1;
        while (low < high) {
            if (numStr.charAt(low) != numStr.charAt(high)) {
                return false;
            }
            low++;
            high--;
        }

        return true;
    }

上面的代码采用while循环实现的,也可以使用for循环来实现,如下:

    private static boolean isPalindrome(int number) {
        String numStr = String.valueOf(number);

        int length = numStr.length();
        for (int low = 0, high = length - 1; low < high; low++, high--) {
            if (numStr.charAt(low) != numStr.charAt(high)) {
                return false;
            }
        }

        return true;
    }

举一反三:如果给定一个字符串,又该如何判定是否为回文字符串呢?上面的代码示例已经给出了相应的解决思路。

测试验证

    public static void main(String[] args) {
        System.out.println(isPalindrome(0));
        System.out.println(isPalindrome(1));
        System.out.println(isPalindrome(101));
        System.out.println(isPalindrome(12321));
        System.out.println(isPalindrome(1147483647));
    }

输出的结果如下:

true
true
true
true
false

更多有关Java面试相关的知识点可以关注【Java面试手册】小程序,涉及Java基础、多线程、JVM、Spring、Spring Boot、Spring Cloud、Mybatis、Redis、数据库、数据结构与算法等。

【Java面试手册-算法篇】给定一个数字,请判断是否为回文数字?

Original: https://www.cnblogs.com/javatop/p/16498599.html
Author: 然笑后端
Title: 【Java面试手册-算法篇】给定一个数字,请判断是否为回文数字?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/586458/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 52.时光洪流

    sdfds posted @2022-09-28 08:29 随遇而安== 阅读(5 ) 评论() 编辑 Original: https://www.cnblogs.com/55z…

    Java 2023年6月7日
    0100
  • [算法基础] 从斐波那契数列说起(一)

    从斐波那契数列说起 斐波那契(Fibonacci)数列是数学中一个著名的数列,有很多神奇的特性,在多个领域有广泛使用。定义如下数列为斐波那契数列: 该如何编写程序求解出斐波那契数列…

    Java 2023年6月16日
    097
  • springframework的ReflectionUtils反射工具类功能举例

    import com.shein.dms.common.BasicCase; import com.shein.dms.utils.MathUtils; import com.sh…

    Java 2023年5月30日
    078
  • IO流

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月7日
    084
  • 企业级微服务API网关Fizz-服务编排内置函数

    概述 在前面的教程里已经介绍过服务编排的功能,服务编排主要是基于现有的业务微服务使用在线配置的方式快速的生成一个聚合接口。在进行入参或结果处理时,常要进行数据转换或计算。此时可用常…

    Java 2023年6月9日
    089
  • 头秃了,二十三张图带你从源码了解Spring Boot 的启动流程~

    前言 源码版本 从哪入手? 源码如何切分? 如何创建SpringApplication? 设置应用类型 设置初始化器(Initializer) 设置监听器(Listener) 设置…

    Java 2023年6月14日
    091
  • springboot统一日期格式(前端请求后台接收实体)+ 全局handler前日期统一处理、跨域配置

    第一步:自定义类 import org.apache.commons.lang.StringUtils; import org.springframework.core.conve…

    Java 2023年5月30日
    072
  • 记一次docker compose的低级错误

    记一次docker compose的低级错误 问题 ​ 今天在学习dockercompose的时候,启动docker compose up,结果却出现异常 Error respon…

    Java 2023年6月8日
    077
  • String、StringBuilder和StringBuffer

    JVM(Java虚拟机) 学习String类前,先了解一下JVM,也称为Java虚拟机。 JVM内存分有几大区域,其中,常见有堆、桟、方法区、常量池。 堆是运行时数据区,类通过ne…

    Java 2023年6月5日
    0104
  • Mybatis的一级、二级缓存

    一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Sessio…

    Java 2023年6月13日
    088
  • mybatis-plus

    mybatis-plus执行 SQL 分析打印 https://gitee.com/baomidou/mybatis-plus-samples/blob/master/mybati…

    Java 2023年5月30日
    091
  • StatementHandler-Mybatis源码系列

    内容更新github地址:我飞 StatementHandler接口 StatementHandler封装了Mybatis连接数据库操作最基础的部分。因为,无论怎么封装,最终我们都…

    Java 2023年6月14日
    0100
  • spring整合mybatis

    <dependencies> <dependency> <groupid>mysql</groupid> <artifacti…

    Java 2023年6月15日
    091
  • 完了,我的小网站图片挂了!

    大家好,我是二哥! 很早之前,就有小伙伴给我反馈说《Java 程序员进阶之路》经常有图片不显示或者加载缓慢。 但由于白嫖(GitHub图床+jsdelivr CDN)的力量实在是太…

    Java 2023年6月9日
    073
  • 和身边的人搭伴学

    互为磨刀石 互相挑毛病。前提是双方都非常信任彼此,因为搞软件大多容易沉浸在自己的问题里,又不太善于做高情商的表达。一遇到沟通问题,一句话说不好就会引发误会。 有了信任的伙伴,你就不…

    Java 2023年6月15日
    095
  • Idea2019.3 :一直卡在Resolving Maven dependencies

    maven仓库是阿里的 问题 如图,下载jar包挺快,一直卡在解析那一步。。。。导致写注解老是爆红 解决 修改maven Importing的jvm参数, 默认为700多, 直接修…

    Java 2023年6月7日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球