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)

结论

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

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

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

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

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

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

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

相关推荐
狄加山67519 分钟前
C语言(指针基础练习)
java·c语言·算法
TANGLONG22237 分钟前
【初阶数据结构和算法】八大排序算法之插入排序(直接插入排序、希尔排序及其对比)
java·c语言·数据结构·c++·算法·面试·排序算法
破-风40 分钟前
leetcode-mysql
算法·leetcode·职场和发展
y250841 分钟前
《时间和空间复杂度》
java·数据结构·算法
南桥几晴秋1 小时前
【算法刷题指南】前缀和
c++·算法·前缀和
acqkla1 小时前
L1-093 猜帽子游戏
数据结构·算法·游戏
戊子仲秋1 小时前
【LeetCode】每日一题 2024_12_13 K 次乘运算后的最终数组 I(暴力)
算法·leetcode·职场和发展
向阳12181 小时前
leetcode66:加一
java·算法·leetcode
银氨溶液1 小时前
力扣——322. 零钱兑换
数据结构·算法·leetcode·职场和发展·动态规划