Leetcode 每日一题9.回文数

🌈🌈🌈今天给大家分享的是:回文数的解法

目录

​编辑

问题描述

输入输出格式

示例

约束条件

进阶挑战

解决方案

问题分析

过题图片

字符串转换法

数学方法

算法解释

题目链接

结论


问题描述

给定一个整数 x,我们需要判断它是否是一个回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文数,而 123 不是。

输入输出格式

  • 输入:一个整数 x
  • 输出:如果 x 是回文数,返回 true;否则,返回 false

示例

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

约束条件

  • -2^31 <= x <= 2^31 - 1

进阶挑战

不将整数转为字符串,解决这个问题。

解决方案

问题分析

要判断一个整数是否为回文数,我们可以采用两种方法:

  1. 字符串转换法:将整数转换为字符串,然后使用双指针从两端向中间遍历,比较字符是否相等。
  2. 数学方法:通过数学运算,反转整数的一半数字,然后比较反转后的数字与原始数字的前半部分是否相等。

过题图片

字符串转换法

这种方法简单直观,但不符合进阶挑战的要求。以下是使用字符串转换法的代码实现:

复制代码
class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0 || (x % 10 == 0 && x != 0)) return false;
        String num = Integer.toString(x);
        int l = 0, r = num.length() - 1;
        while (l < r) {
            if (num.charAt(l) != num.charAt(r)) return false;
            l++;
            r--;
        }
        return true;
    }
}

数学方法

这种方法不需要将整数转换为字符串,而是通过数学运算来实现。以下是使用数学方法的代码实现:

复制代码
class Solution {
    public boolean isPalindrome(int x) {
        // 负数和以0结尾的非0数不是回文数
        if (x < 0 || (x % 10 == 0 && x != 0)) return false;
        
        int reversedHalf = 0, original = x;
        while (x > 0) {
            int pop = x % 10;
            x = x / 10;
            reversedHalf = reversedHalf * 10 + pop;
        }
        
        // 对于奇数长度的回文数,我们只需要判断前半部分
        return original == reversedHalf || original == reversedHalf / 10;
    }
}

算法解释

  1. 负数和以0结尾的非0数不是回文数:首先,我们排除负数和以0结尾的非0数,因为它们不可能是回文数。
  2. 反转整数的一半数字 :通过 while 循环,我们不断地取出 x 的最低位数字,并将其加到 reversedHalf 的末尾。同时,我们将 x 除以10,去掉最低位数字。
  3. 比较反转后的数字与原始数字的前半部分 :最后,我们比较原始数字 original 与反转后的数字 reversedHalf 是否相等。对于奇数长度的回文数,我们只需要比较 originalreversedHalf 除以10的结果是否相等。

题目链接

9. 回文数 - 力扣(LeetCode)

结论

通过上述两种方法,我们可以有效地判断一个整数是否为回文数。数学方法避免了字符串转换

🌈🌈🌈好啦,今天的分享就到这里!

🛩️🛩️🛩️希望各位看官读完文章后,能够有所提升。

🎉🎉🎉创作不易,还希望各位大佬支持一下!

✈️✈️✈️点赞,你的认可是我创作的动力!

⭐⭐⭐收藏,你的青睐是我努力的方向!

✏️✏️✏️评论:你的意见是我进步的财富!

相关推荐
东雁西飞7 分钟前
MATLAB 控制系统设计与仿真 - 26
开发语言·算法·matlab·工业机器人·智能机器人
Dream it possible!1 小时前
CCF CSP 第30次(2023.09)(1_坐标变换_C++)(先输入再计算;边输入边计算)
c++·算法·csp
Terrence Shen2 小时前
跟着AI复习一下pytorch原理和操作
人工智能·pytorch·python·深度学习·算法·机器学习
军训猫猫头2 小时前
80.Dictionary 字典 C#例子
开发语言·算法·c#
码农幻想梦2 小时前
实验5 逻辑回归
算法·机器学习·逻辑回归
听微雨3 小时前
P9241 [蓝桥杯 2023 省 B] 飞机降落
算法·深度优先
平生不喜凡桃李3 小时前
对最近的刷题做一个小总结(关于动态规划和贪心)
算法·动态规划·双指针
zhangzeyuaaa3 小时前
深度学习有哪些算法?
人工智能·深度学习·算法
CodeJourney.4 小时前
探索ima.copilot:个人知识库搭建的AI新利器
数据库·人工智能·python·算法
天行者@4 小时前
OTSU算法(大津算法)
人工智能·opencv·算法·二值化