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)

结论

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

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

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

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

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

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

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

相关推荐
南玖yy3 分钟前
C语言:数组的介绍与使用
c语言·开发语言·算法
小菜鸟博士6 分钟前
手撕Vision Transformer -- Day1 -- 基础原理
人工智能·深度学习·学习·算法·面试
灰灰老师1 小时前
数据分析系列--[11] RapidMiner,K-Means聚类分析(含数据集)
人工智能·算法·机器学习·数据挖掘·数据分析·kmeans·rapidminer
追求源于热爱!2 小时前
记4(可训练对象+自动求导机制+波士顿房价回归预测
图像处理·人工智能·算法·机器学习·回归
比特在路上2 小时前
蓝桥杯之c++入门(四)【循环】
c++·职场和发展·蓝桥杯
qq_433618442 小时前
哈夫曼树
数据结构·算法
余辉zmh2 小时前
【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(二)
c++·算法·leetcode·贪心算法
余辉zmh3 小时前
【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(一)
c++·算法·leetcode·贪心算法
taoyong0013 小时前
代码随想录算法训练营第三十七天-动态规划-完全背包-377. 组合总和 Ⅳ
c++·算法·leetcode·动态规划
励志成为美貌才华为一体的女子3 小时前
python算法和数据结构刷题[4]:查找算法和排序算法
数据结构·算法·排序算法