回文数:探索数字世界中的对称美学

news2024/12/27 14:01:16

在这里插入图片描述

本篇博客我会讲解力扣中的“9. 回文数”这道题,大家重点理解判断回文数的方法。

先来审题:这是题目链接。

在这里插入图片描述
来看几个输出示例:
在这里插入图片描述
还有一些条件:
在这里插入图片描述
第一反应是:为啥是个整数呢?万一是个字符串,那不简单了?只需2个指针,一个从左向右遍历,另一个从右向左遍历,相遇之前,如果对应的字符都相同,就是“回文串”。

所以,这道题可以使用sprintf或者itoa等函数,把整数先转换成字符串,再来解决。不过那样就太low了,而且“进阶”也说了,你能不将整数转换成字符串来解决这个问题吗?

所以,这里我们讨论的问题是:如何不把整数转换成字符串,直接判断它是不是回文数?

思路是这样的:如果一个数反过来还是它自己,那么这个数就是回文数。请仔细体会这句话。

下面的问题是:如何把一个数反过来?比如,把1234反过来变成4321?

大家可以联想以下,如何使用操作符操作整数。一个比较经典的操作是:取出每一位,用的是“%10 /10”的思路。

1234 % 10 = 4
1234 / 10 = 123
123 % 10 = 3
123 / 10 = 12
12 % 10 = 2
12 / 10 = 1
1 % 10 = 1
1 / 10 = 0

在这个数变成0之前,我们就从后向前把每一位拿出来了,也就是拿到了4、3、2、1。看起来好像倒过来了?

不完全是。现在,我们还要把它们存到一个新的数中,也就是让一个整型变量rev里面存的是4321。怎么存呢?

很简单,每次执行rev = rev * 10 + 某个一位数;即可。也就是:

rev = 0
rev = rev * 10 + 1;
rev = 1
rev = rev * 10 + 2;
rev = 12
rev = rev * 10 + 3;
rev = 123
rev = rev * 10 + 4;
rev = 1234

把上面的思路整合一下:每次“%10 /10”拿到每一位,再用“某个变量乘10加上这个数”的方式把这一位数存进去,就能把一开始的数倒过来了。如果倒过来的数就是它本身,那么就是回文数。

注意:由于“把x倒过来”的操作会修改x,所以先用tmp拷贝一份,再把tmp倒过来即可。

写成代码如下:

bool isPalindrome(int x){
    // 把x倒过来
    int rev = 0;
    int tmp = x;
    while (tmp)
    {
        // 把tmp的最右边一位数存到rev里
        rev = rev*10 + (tmp%10);
        // 去掉tmp的最右边一位
        tmp /= 10;
    }

    return rev == x;
}

但是这样会有用例过不了:
在这里插入图片描述
分析一下:我们的操作都是针对正数的,负数肯定不是回文数,直接return false即可。

bool isPalindrome(int x){
    // 负数不是回文数
    if (x < 0)
        return false;
    
    // 把x倒过来
    int rev = 0;
    int tmp = x;
    while (tmp)
    {
        // 把tmp的最右边一位数存到rev里
        rev = rev*10 + (tmp%10);
        // 去掉tmp的最右边一位
        tmp /= 10;
    }

    return rev == x;
}

但是还是有用例过不了:
在这里插入图片描述
如果你有经验的话,会发现这个数好大!可能越界了,所以不能用int来存储,应该改成long或者long long,这里先用long试一下:

bool isPalindrome(int x){
    // 负数不是回文数
    if (x < 0)
        return false;
    
    // 把x倒过来
    long rev = 0;
    long tmp = x;
    while (tmp)
    {
        // 把tmp的最右边一位数存到rev里
        rev = rev*10 + (tmp%10);
        // 去掉tmp的最右边一位
        tmp /= 10;
    }

    return rev == x;
}

在这里插入图片描述

这样就过了。

总结

  1. 回文数判断方法:把一个数倒过来,看和自己相不相等。
  2. 把一个数倒过来的方法:“%10 /10”取出每一位,再“乘10加一位数”续到一个新的变量上。

感谢大家的阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/493031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows下安装OpenCL

由于我的电脑是windows10&#xff0c;显卡是集显Intel UHD Graphics 630。 下载Intel的SDK for OpenCL&#xff0c;下载地址https://software.intel.com/en-us/opencl-sdk/choose-download&#xff0c;也可以在我的资源里面直接下载https://download.csdn.net/download/qq_363…

System verilog【2】字符串,函数,任务

前言 素手青颜光华发&#xff0c;半世尘缘半世沙。我唤青天睁开眼&#xff0c;风霜怎奈并蒂花 \;\\\;\\\; 目录 前言字符串packed组合型结构体组合型数组 过程块initial & always functiontask 字符串 module chertanis;initial beginstring s"hola,mundo!",s2…

Java 多线程知识

参考链接&#xff1a;https://www.cnblogs.com/kingsleylam/p/6014441.html https://blog.csdn.net/ly0724ok/article/details/117030234/ https://blog.csdn.net/jiayibingdong/article/details/124674922 导致Java线程安全问题最主要的原因&#xff1a; &#xff08;1&#…

修改亮度、对比度、色调、饱和度,达到预期效果

用户态可以通过v4l2自带工具进行一些UVC相机参数的设定&#xff0c;包括采集卡驱动之类&#xff0c;也可以通过v4l2自带工具进行参数设定。 通过修改这些参数的值&#xff0c;可以弥补相机本身彩色部分自带不足。 总的来说就这么几种命令&#xff1a; 查看设备所有参数信息&a…

C++系列三:变量、常量

常量、变量 1. 变量1.1 定义变量1.2 初始化变量1.3 变量数据类型1.4 变量作用域 2. 常量2.1 定义常量2.2 常量类型2.3 常量作用域2.4 常量用法 3. 总结 1. 变量 变量是一个用于存储值的命名内存位置&#xff0c;可以存储多种不同类型的数据&#xff0c;例如整数、实数、字符或…

淘宝搜广推技术备注

第一篇文章 一、序列特征处理方式 1&#xff1a;淘宝的类目体系中&#xff0c;有大类目、小类目&#xff08;淘宝大类目和小类目怎么区分&#xff1f;有何运营技巧&#xff1f;-卖家网&#xff09;&#xff0c;在做推荐系统时&#xff0c;有个sim建模&#xff08;search-base…

【Java】抽象类接口

目录 1.抽象类 2.接口 2.1实现多个接口 2.2接口之间的关系 2.3接口使用实例 2.3.1Comparable接口 2.3.2Comparator接口 2.3.2Clone接口 2.4抽象类与接口的区别 1.抽象类 定义&#xff1a;抽象方法&#xff1a;这个方法没有具体的实现&#xff1b; 抽象类&#xff1a;不…

边学边记——数据结构☞和搜索有关的数据结构(搜索树,Set,Map,哈希表)

目录 模型 一、搜索 1. 场景 2. 搜索树 2.1 概念 2.2 查找 2.3 插入 2.4 删除 2.5 实现 2.6 性能分析 2.7 和Java的关系 二、Set 1. 常见方法 2. 注意 三、Map 1. 关于Map.Entry的说明,> 2. Map的常用方法说明 3. 注意 四、哈希表 1. 概念 2. 冲突 2…

[论文分享] VOS: Learning What You Don‘t Know by Virtual Outlier Synthesis

这篇文章是ICLR‘ 2022的一篇文章。 No.contentPAPER{ICLR’ 2022} VOS: Learning What You Don’t Know by Virtual Outlier SynthesisURL论文地址CODE代码地址 Motivation 现有OOD Detection方法大多依赖于真实的离群点数据集进行模型正则化&#xff0c;实际应用中过于昂…

常用位运算

一、求解二进制表示的第k位数字 #include<iostream> using namespace std;int main() {int n 10; // 例如&#xff0c;十进制10用二进制表示为1010 for(int k3;k>0;k--)cout << (n >> k & 1);// 第一步&#xff1a;右移k位// 第二步&#xff1a; &am…

JVM基础总结

文章目录 一、程序计数器二、Java虚拟机栈栈内存溢出【StackOverflowError】线程运行诊断 三、本地方法栈【Native Method Stacks】四、堆【Head】线程共享堆内存溢出【OutOfMemoryError&#xff1a;Java heap space】堆内存诊断 五、方法区【Method Area】线程共享运行时常量池…

Springboot +Flowable,为流程设置租户

一.简介 什么叫flowable的租户呢&#xff1f;这边举个例子&#xff1a; 假设现在有 A、B、C、D 四个子系统&#xff0c;四个子系统都要部署同一个名为 leave 的流程&#xff0c;如何区分四个不同子系统的的流程呢&#xff1f;通过租户就可以解决这个问题。Flowable 中的租户其…

dell r750服务器安装centos系统全记录

1、启动盘制作 1.1 下载系统 打开 https://www.centos.org/download/ 任意选择一个镜像网站&#xff0c;博主选择的是163镜像 下载内存为4g镜像文件 这里也可以参考 https://blog.csdn.net/weixin_46703995/article/details/121191113 1.2 下载启动盘制作软件 linux系统一…

Denoising Diffusion Probabilistic Model,DDPM阅读笔记——(二)

Denoising Diffusion Probabilistic Model&#xff0c;DDPM阅读笔记 一、去噪扩散概率模型&#xff08;Denoising Diffusion Probabilistic Model&#xff0c;DDPM&#xff09; 一、去噪扩散概率模型&#xff08;Denoising Diffusion Probabilistic Model&#xff0c;DDPM&…

C++数据结构:手撕红黑树

目录 一. 红黑树的概念及结构 二. 红黑树节点的定义 三. 红黑树节点的插入 3.1 初步查找插入节点的位置并插入节点 3.2 红黑树结构的调整 3.3 红黑树节点插入完整版代码 四. 红黑树的结构检查 4.1 检查是否为搜索树 4.2 检查节点颜色是否满足要求 附录&#xff1a;红黑…

TypeScript进阶

目录 TypeScript 与 Vue 文档说明 vscode 插件说明 准备页面基本结构 defineProps与Typescript defineEmits与Typescript ref与Typescript reactive与Typescript computed与Typescript 事件对象与Typescript 模板Ref与Typescript 可选链操作符和非空断言 TypeScript…

21.网络爬虫—js逆向详讲与实战

网络爬虫—js逆向 js逆向JavaScript逆向的详细讲解实战演示有道翻译设置密钥和初始向量对密钥和初始向量进行哈希处理创建AES对象并解密消息移除padding并返回结果 前言&#xff1a; &#x1f3d8;️&#x1f3d8;️个人简介&#xff1a;以山河作礼。 &#x1f396;️&#x1f…

python基于卷积神经网络实现自定义数据集训练与测试

样本取自岩心照片&#xff0c;识别岩心是最基础的地质工作&#xff0c;如果用机器来划分岩心类型则会大大削减工作量。 下面叙述中0指代Anhydrite_rock&#xff08;膏岩&#xff09;&#xff0c;1指代Limestone&#xff08;灰岩&#xff09;&#xff0c;2指代Gray Anhydrite_r…

深度学习-第T6周——好莱坞明星识别

深度学习-第T6周——好莱坞明星识别 深度学习-第T6周——好莱坞明星识别一、前言二、我的环境三、前期工作1、导入数据集2、查看图片数目3、查看数据 四、数据预处理1、 加载数据1、设置图片格式2、划分训练集3、划分验证集4、查看标签 2、数据可视化3、检查数据4、配置数据集 …

Flutter学习之旅 - 页面布局Stack层叠组件

文章目录 StackPositioned定位布局浮动导航(StackPositioned)FlutterMediaQuery获取屏幕宽度和高度StackAlign Stack Stack意思是堆的意思&#xff0c;我们可以用Stack结合Align或者Stack结合Positioned来实现页面的定位布局 属性说明alignment配置所有元素显示位置children子组…