闯关leetcode——9. Palindrome Number

news2024/12/26 3:33:55

大纲

  • 题目
    • 地址
    • 内容
  • 解题
    • 代码地址

题目

地址

https://leetcode.com/problems/palindrome-number/description/

内容

Given an integer x, return true if x is a palindrome, and false otherwise.

Example 1:

Input: x = 121
Output: true
Explanation: 121 reads as 121 from left to right and from right to left.

Example 2:

Input: x = -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.

Example 3:

Input: x = 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.

Constraints:

  • -231 <= x <= 231-1

Follow up: Could you solve it without converting the integer to a string?

解题

这题就是要求不使用字符串的方式,判断一个数在10进制表示时是否是个回文数。
因为这个是10进制数的逐位比较,不能使用诸如左移右移之类的操作来简化运算,只能使用对10取模以及除以10这样的操作来取各个位置的数字。
一种比较简单的思路是将10进制的每位保存到一个容器(如vector)中,然后从容器头部和尾部逐位对比。

    bool isPalindrome(int x) {
        if (x < 0) {
            return false;
        }
        
        std::vector<int> v;
        while (x != 0) {
            v.push_back(x % 10);
            x /= 10;
        }

        int left = 0;
        int right = v.size() - 1;
        while (left < right) {
            if (v[left] != v[right]) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }

这个方法比较传统,但是有一个问题,就是它的遍历次数略多。
如果我们希望减少遍历次数,又不想引入其他运算,只要能识别出数字的中间位置,然后逐位对比即可。

    bool isPalindrome(int x) {
        int count = 0;
        if (x >= 0 && x < 10) {
            return true;
        } else if (x >= 10 && x < 100) {
            count = 2;
        } else if (x >= 100 && x < 1000) {
            count = 3;
        } else if (x >= 1000 && x < 10000) {
            count = 4;
        } else if (x >= 10000 && x < 100000) {
            count = 5;
        } else if (x >= 100000 && x < 1000000) {
            count = 6;
        } else if (x >= 1000000 && x < 10000000) {
            count = 7;
        } else if (x >= 10000000 && x < 100000000) {
            count = 8;
        } else if (x >= 100000000 && x < 1000000000) {
            count = 9;
        } else if (x >= 1000000000 && x < 2147483648) {
            count = 10;
        } else {
            return false;
        }

        int pushCount = count / 2;
        int popCount = pushCount;

        stack<int> s;
        while (pushCount > 0) {
            s.push(x % 10);
            x /= 10;
            pushCount--;
        }

		// 奇数位则抛弃中间的数字
        if (count % 2 != 0) {
            x /= 10;
        }

        while (popCount > 0) {
            if (s.top() != x % 10) {
                return false;
            }
            s.pop();
            x /= 10;
            popCount--;
        }
        return true;
    }

上面这个算法就是将回文数右侧数字Push到栈中,然后陆续Pop出数字,和左侧数字从后向前对比。这个算法需要引入寻找中间位置的逻辑,且显得略复杂。
最后一种不需要计算中间位置,同时遍历次数相对比较少的是:利用原数字的低位构建新的数字的高位,然后对比两个数字是否相同。

    bool isPalindrome(int x) {
        if (x < 0) {
            return false;
        }

        long long reverse = 0;
        int original = x;
        while (x != 0) {
            reverse = reverse * 10 + x % 10;
            x /= 10;
        }
        return reverse == original;
    }

这个方法非常简单,但是会引入乘法操作。
在这里插入图片描述

代码地址

https://github.com/f304646673/leetcode/tree/main/9-Palindrome-Number/cplusplus

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

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

相关文章

Windows 10/11 Raspberry Pi PICO (RP2040) VScode开发环境搭建

Windows 10/11 Raspberry Pi PICO VScode开发环境搭建 概述下载树莓派官方开发环境配置工具安装开发环境 概述 下载树莓派官方开发环境配置工具 pico-setup-windows 点击"Download the lastest release" 下载文件为&#xff1a;《pico-setup-windows-x64-standalo…

Gz会员卡检索不到充值记录的处理方法

会员卡预收款查询报表&#xff08;9508&#xff09;中输入会员卡号后检索不到该卡的充值记录&#xff0c;在MemberCard表中检索到该会员卡&#xff0c;将PriorityID值改为0即可检索。 下图为检索后的结果。

ElasticSearch7.8下载、安装教程

文章目录 前言一、Windows安装ElasticSearch7.8二、Elasticsearch-head安装三、Kibana安装 前言 本文章演示elasticSearch7.8、elasticSearch-head(插件模式)、kibana的Windows下载、安装教程。安装前&#xff0c;请检查电脑是否已经安装好node环境和JDK环境。 一、Windows安装…

【Kubernetes】K8s 的鉴权管理(二):基于属性 / 节点 / Webhook 的访问控制

K8s 的鉴权管理&#xff08;二&#xff09;&#xff1a;基于属性 / 节点 / Webhook 的访问控制 1.基于属性的访问控制&#xff08;ABAC 鉴权&#xff09;2.基于节点的访问控制&#xff08;node 鉴权&#xff09;2.1 读取操作2.2 写入操作 3.基于 Webhook 的访问控制3.1 基于 We…

tekton pipeline workspaces

tekton pipeline workspace是一种为执行中的管道及其任务提供可用的共享卷的方法。 在pipeline中定义worksapce作为共享卷传递给相关的task。在tekton中定义workspace的用途有以下几点: 存储输入和/或输出在task之间共享数据secret认证的挂载点ConfigMap中保存的配置的挂载点…

AI基础 : Adversarial Search II 对抗性搜索

Non-deterministic Transitions AND-OR Search Trees • In deterministic environments在确定性环境中&#xff0c;分支仅由智能体的选择引起。, branching only occurs due to agent’s choice (OR Nodes) • In non-deterministic environments在非确定性环境中&#xff0c…

Linux多线程编程实战:深入探索互斥锁的艺术

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f985;Linux线程互斥&#x1f40f;进程线程间的互斥相关背景概念&#x1f98c;互斥锁mutex*下面是一个&#xff1a;操作共享变…

九、外观模式

外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;有叫门面模式&#xff0c;它为一个复杂子系统提供一个简单的接口&#xff0c;隐藏系统的复杂性。通过使用外观模式&#xff0c;客户端可以更方便地和复杂的系统进行交互&#xff0c;而无需直接…

在国产芯片上实现YOLOv5/v8图像AI识别-【4.4】RK3588网络摄像头推理后推流到RTSP更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案&#xff0c;专栏中实现了YOLOv5/v8在国产化芯片上的使用部署&#xff0c;并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频&#xff1a;https://www.bilibili.com/video/BV1or421T74f 前言…

机器学习TFIDF的情感分类文章

一.中文分词 当读者使用Python爬取了中文数据集之后&#xff0c;首先需要对数据集进行中文分词处理。由于英文中的词与词之间是采用空格关联的&#xff0c;按照空格可以直接划分词组&#xff0c;所以不需要进行分词处理&#xff0c;而中文汉字之间是紧密相连的&#xff0c;并且…

HTML零基础教程(超详细)

一、什么是HTML HTML&#xff0c;全称超文本标记语言&#xff08;HyperText Markup Language&#xff09;&#xff0c;是一种用于创建网页的标准标记语言。它通过一系列标签来定义网页的结构、内容和格式。HTML文档是由HTML元素构成的文本文件&#xff0c;这些元素包括标题、段…

《Nginx核心技术》第16章:实现Nginx的高可用负载均衡

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球项目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

[数据结构] 开散列法 闭散列法 模拟实现哈希结构(一)

标题&#xff1a;[数据结构] 开散列法 && 闭散列法 模拟实现哈希结构 个人主页&#xff1a;水墨不写bug 目录 一、闭散列法 核心逻辑的解决 i、为什么要设置位置状态&#xff1f;&#xff08;伪删除法的使用&#xff09; ii、哈希函数的设计 接口的实现 1、插入&a…

Linux 常用命令 - tail 【显示文件最后几行内容】

简介 tail 这个命令源自英文单词 “尾巴”&#xff0c;它的主要功能是显示文件的最后几行内容。通过使用 tail&#xff0c;用户可以查看文件的最新添加内容&#xff0c;特别是对于监控日志文件来说非常有用。tail 命令默认显示文件的最后 10 行&#xff0c;但这可以通过参数调…

走进低代码报表开发(一):探秘报表数据源

在前文当中&#xff0c;我们对勤研低代码平台的流程设计功能进行了介绍。接下来&#xff0c;让我们一同深入了解在企业日常运营中另一个极为常见的报表功能。在当今数字化时代&#xff0c;高效的报表生成对于企业的决策至关重要。勤研低代码开发平台能够以卓越的性能和便捷的操…

Git 学习与使用

0 认识⼯作区、暂存区、版本库 ⼯作区&#xff1a;是在电脑上你要写代码或⽂件的⽬录。 暂存区&#xff1a;英⽂叫stage或index。⼀般存放在.git ⽬录下的index⽂件&#xff08;.git/index&#xff09;中&#xff0c;我们 把暂存区有时也叫作索引&#xff08;index&#xff09;…

LAMP环境下项目部署

目录 1、创建一台虚拟机 centos 源的配置 备份源 修改源 重新加载缓存 安装软件 2、关闭防火墙和selinux 查看防火墙状态 关闭防火墙 查看SELinux的状态 临时关闭防火墙 永久关闭SELinux&#xff1a;编辑SELinux的配置文件 配置文件的修改内容 3、检查系统中是否…

NFTScan | 09.02~09.08 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2024.09.02~ 2024.09.08 NFT Hot News 01/ 数据&#xff1a;NFT 8 月销售额跌破 4 亿美元&#xff0c;创年内新低 9 月 2 日&#xff0c;数据显示&#xff0c;8 月 NFT 的月销售额仅为 …

直播相关01-录制麦克风声音,QT上 .pro 将 linux,mac和windows上配置为三种可以共享, 在.pro文件中 message 的作用

一 QT 上的 .pro 文件 将 linux&#xff0c;mac和windows上配置设置为可以共享 1. 先来看文件夹布局 2. 再来看 QT 中的 .pro文件 .pro 文件的写法 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler …

【FFMPEG】FFplay音视频同步分析(下)

audio_decode_frame函数分析 首先说明一下&#xff0c;audio_decode_frame() 函数跟解码毫无关系&#xff0c;真正的解码函数是 decoder_decode_frame 。 audio_decode_frame() 函数的主要作用是从 FrameQueue 队列里面读取 AVFrame &#xff0c;然后把 is->audio_buf 指向…