☆打卡算法☆LeetCode 9、判断回文数 算法解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
简介: “判断给定的整数是否是一个回文数。”

一、题目


1、算法题目

“判断给定的整数是否是一个回文数。”

题目链接: 来源:力扣(LeetCode)

链接:leetcode-cn.com/problems/pa…


2、题目描述

给你一个整数 x ,如果 x 是一个会问整数,返回 true;否则,返回 false

回文数是指正序(从左到右)和倒序(从右到左)读都是一个整数。例如,121 是回文,而 123 不是。

比如:

输入:x = 121

输出:true

输入:s = "-121"

输出:false

解析:从左向右读-121,从右向左读123-,并不是一个回文数。


二、解题


1、思路分析

这道题第一个想法是将数字转换成字符串,然后检查字符串是否为回文,但是这个需要额外的空间来创建字符串。

第二个想法是直接将数字本身反转,然后将反转后的数字与原始数字进行比较,如果相同,那么这个整数就是回文。

但是,可能会出现反转后的数字大于INT.MAX的情况,也就是整数溢出。

那么按照第二个想法,为了避免整数溢出问题,可以考虑只反转数字的一半,例如,1221,将数字12反转为21,与后半部分21比较,因为二者相同,所以数字1221是回文。


2、代码实现

首先,需要处理一些一定不是回文的情况:

  • 1、开头带符号的一定不是回文,例如 -123-1221,这种情况直接返回false
  • 2、数字大于0,并且末尾数为0的,例如 10100,这种情况直接返回false

接下来反转数字的一半:

  • 1、例如数字1221,执行1221 % 10取模运算,得到最后一位数字1
  • 2、将数字1221除以10将最后一位数字移除,1221 / 10 = 122
  • 3、重复上面的操作,直到原始数字小于或等于反转后的数字,就说明到达原始数字位数的一半了。
public class Solution 
{
    public bool IsPalindrome(int x) 
    {
        // 当 x < 0 时,x 不是回文数。
        // 当 x != 0,并且尾数等于0 ,x 不是回文数
        if (x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }
        int revertedNumber = 0;
        while (x > revertedNumber) {
            revertedNumber = revertedNumber * 10 + x % 10;
            x /= 10;
        }
        // 当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。
        // 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123,
        // 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。
        return x == revertedNumber || x == revertedNumber / 10;
    }
}
复制代码

执行结果:

网络异常,图片无法展示
|


3、时间复杂度

时间复杂度: O(log n)

对于每次迭代,我们会将输入除以 1010,因此时间复杂度为 O(log n)。

空间复杂度: O(1)

有常数级个变量,所以空间复杂度为O(1)。


三、总结

需要注意的一个点就是由于回文数的位数可奇可偶,所以当它的长度是偶数时,它对折过来应该是相等的。

当它的长度是奇数时,那么它对折过来后,有一个的长度需要去掉一位数(除以 10 并取整)。



相关文章
|
2天前
|
机器学习/深度学习 算法 TensorFlow
【深度学习】深度学习语音识别算法的详细解析
深度学习语音识别算法是一种基于人工神经网络的语音识别技术,其核心在于利用深度神经网络(Deep Neural Network,DNN)自动从语音信号中学习有意义的特征,并生成高效的语音识别模型。以下是对深度学习语音识别算法的详细解析
11 5
|
10天前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
27 6
|
7天前
|
算法 JavaScript 前端开发
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
22 1
|
10天前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
29 2
|
10天前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
25 1
|
10天前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
22 1
|
3天前
|
存储 缓存 算法
深入解析B树:数据结构、存储结构与算法优势
深入解析B树:数据结构、存储结构与算法优势
|
12天前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
26 6
|
12天前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
39 2
|
12天前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
15 7

热门文章

最新文章

推荐镜像

更多