【LeetCode刷题笔记(13-1)】【Python】【回文数】【反转整数】【简单】

news2024/11/19 1:54:05

文章目录

  • 引言
  • 回文数
    • 题目描述
    • 提示
  • 题意分析
  • 解决方案1:【反转字符串】
  • 解决方案2:【反转整数】
  • 题外话
  • 结束语

9. 回文数


引言

编写通过所有测试案例的代码并不简单,通常需要深思熟虑理性分析。虽然这些代码能够通过所有的测试案例,但如果不了解代码背后的思考过程,那么这些代码可能并不容易被理解和接受。我编写刷题笔记的初衷,是希望能够与读者们分享一个完整的代码是如何在逐步的理性思考下形成的。我非常欢迎读者的批评和指正,因为我知道我的观点可能并不完全正确,您的反馈将帮助我不断进步。如果我的笔记能给您带来哪怕是一点点的启示,我也会感到非常荣幸。同时,我也希望我的分享能够激发您的灵感和思考,让我们一起在编程的道路上不断前行~

回文数

题目描述

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

  • 回文数:正序(从左向右)和倒序(从右向左)读都是一样的整数。

    • 例如,121 是回文,而 123 不是。

示例 1:

  • 输入: x = 121
  • 输出: true

示例 2:

  • 输入:x = -121
  • 输出: false
  • 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

  • 输入: x = 10
  • 输出: false
  • 解释:从右向左读, 为 01 。因此它不是一个回文数。

提示

  • -231 <= x <= 231 - 1

题意分析

根据示例,我们可以总结出以下规律:

  1. 依据示例2,对于负整数,由于存在"-"号,不可能构成回文数;
  2. 依据示例3,对于末尾数字为0的整数(0除外),不可能构成回文数,因为0不可能出现在正整数开头

因此,对于符合规律1/2的输入,我们可以先通过if语句直接返回False

即:

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0 or (x % 10 == 0 and x != 0):
            return False

解决方案1:【反转字符串】

图1 题目暗示

题意告诉我们,进阶做法是不能基于字符串解决【回文数】这个问题 ===> 基于字符串的做法应该比较简单且容易上手。

实际上,基于字符串的解法确实非常简单,

完整代码如下

class Solution:
    def isPalindrome(self, x: int) -> bool:
        x_str = str(x) # 将整数x转换为字符串x_str
        return x_str == x_str[::-1]

从代码中可以看出,我们只需要三步即可解决【回文数】问题:

  1. 利用str()将整数x强制类型转换为字符串x_str
  2. 利用[::-1]将字符串反转;
  3. 比较反转前和反转后的字符串是否一致,一致则是回文数,返回True,否则返回False

运行结果

图2 运行结果

解决方案2:【反转整数】

问题1:如果题目不提示【字符串】解法,一般我们会想到什么方法呢?

我们一般不会离开"整数"这个范畴去解决问题 ===> 正常步骤应该是:

  1. 将整数x进行反转,变成另一个整数x_reverse
  2. 比较反转前的x和反转后的x_reverse,判断这两个整数是否相等,相等则是回文数,返回True,否则返回False

完整代码如下:

class Solution:  
    """  
    判断一个整数是否是回文数。  
      
    Args:  
        x (int): 待判断的整数。  
      
    Returns:  
        bool: 如果x是回文数,则返回True;否则返回False。  
    """  
    def isPalindrome(self, x: int) -> bool:  
    	# 边界条件
        if x < 0 or (x % 10 == 0 and x != 0):  
            return False  
  
        # 初始化反转后的数为0  
        x_reverse = 0  
        # 保存原始的x值,以便后面与反转后的数进行比较  
        x_tmp = x  
        # 当x_tmp大于等于1时执行循环,将x_tmp的个位数逐个取出并放到反转后的数中  
        while x_tmp >= 1:  
            # 当前取出的个位数为 x_tmp % 10 
            x_reverse = x_reverse * 10 + x_tmp % 10  # 当前反转数乘以10 + 当前取出的个位数
            # 将x_tmp除以10,去掉当前个位数  
            x_tmp = x_tmp // 10  
        
        
        return x_reverse == x

运行结果:

图3 运行结果

复杂度分析

  • 时间复杂度:O(logn),其中 n 为输入的整数。
  • 空间复杂度:O(1)
    • 只需要常数空间存放若干变量 ===> O(1)

细节1:尽管将整数完全反转可以通过所有测试用例,但如果题目不仅要求输入x满足 -231 <= x <= 231 - 1,而且要求反转后的x_reverse也满足 -231 <= x_reverse <= 231 - 1,那么将整数完全反转可能会导致x_reverse溢出。

由于231 - 1 = 2147483647,如果整数x=2147483647,那么x_reverse=7463847412 > 231 - 1 ⇒ x_reverse溢出。

图3 示例结果

问题2:为什么把x=2147483647作为测试用例时,将整数完全反转的算法仍然能通过呢?

在Python3中,整数类型只有int,没有限制大小!!! ⇒ 理论上,Python 3中的整数没有上限(只要不超出内存空间)⇒ 将整数完全反转的算法面对有溢出风险的输入仍能顺利运行。

题外话

实际上,方案2仍然有进一步优化的空间,因为我们一直没有使用回文数的一个重要性质:对称性 ⇒ 我们实际上只需要反转一半的数字,就可以判断输入x是否为回文了。

参考链接

结束语

  • 亲爱的读者,感谢您花时间阅读我们的博客。我们非常重视您的反馈和意见,因此在这里鼓励您对我们的博客进行评论。
  • 您的建议和看法对我们来说非常重要,这有助于我们更好地了解您的需求,并提供更高质量的内容和服务。
  • 无论您是喜欢我们的博客还是对其有任何疑问或建议,我们都非常期待您的留言。让我们一起互动,共同进步!谢谢您的支持和参与!
  • 我会坚持不懈地创作,并持续优化博文质量,为您提供更好的阅读体验。
  • 谢谢您的阅读!

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

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

相关文章

[PyTorch][chapter 8][李宏毅深度学习][DNN 训练技巧]

前言&#xff1a; DNN 是神经网络的里面基础核心模型之一.这里面结合DNN 介绍一下如何解决 深度学习里面过拟合,欠拟合问题 目录&#xff1a; DNN 训练常见问题 过拟合处理 欠拟合处理 keras 项目 一 DNN 训练常见问题 我们在深度学习网络训练的时候经常会遇到下面…

Android原生实现分段选择

六年前写的一个控件&#xff0c;一直没有时间总结&#xff0c;趁年底不怎么忙&#xff0c;整理一下之前写过的组件。供大家一起参考学习。废话不多说&#xff0c;先上图。 一、效果图 实现思路使用的是radioGroup加radiobutton组合方式。原理就是通过修改RadioButton 的backgr…

什么是EMC工程师?

摘要: 今天来介绍一下什么是EMC工程师。一 EMC工程师起源要了解什么是EMC工程师&#xff0c;我们首先要了解什么是EMC。 今天来介绍一下什么是EMC工程师。 一 EMC工程师起源 要了解什么是EMC工程师&#xff0c;我们首先要了解什么是EMC。 工程师这个职业相信大家都耳熟能详…

Android10.0 人脸解锁流程分析

人脸解锁概述 人脸解锁即用户通过注视设备的正面方便地解锁手机或平板。Android 10 为支持人脸解锁的设备在人脸认证期间添加了一个新的可以安全处理相机帧、保持隐私与安全的人脸认证栈的支持&#xff0c;也为安全合规地启用集成交易的应用&#xff08;网上银行或其他服务&am…

华为OD机试 - 推荐多样性(Java JS Python C)

题目描述 推荐多样性需要从多个列表中选择元素,一次性要返回 N 屏数据(窗口数量),每屏展示 K 个元素(窗口大小),选择策略: 各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一个元素,再从第二个列表中为每屏选择一个元素,依次类推每个列表的元素尽量均分为…

wireshark access/trunk/hybrid报文分析

1&#xff0c;access接口 发送带vlan的报文 wireshark交换机配置 [Huawei-GigabitEthernet0/0/1] [Huawei-GigabitEthernet0/0/1]port link-type access [Huawei-GigabitEthernet0/0/1]port default vlan 100 [Huawei-GigabitEthernet0/0/2]port link-type access [Huawei-Gig…

前端开发之通过vue-office组件实现文件预览

前端开发之通过vue-office组件实现文件预览 前言效果图docx文件xlsx文件pdf文件 vue中简单案例1、安装组件2、vue中代码 前言 在实现文件预览的时候我们可以通过vue-office组件来实现文件的预览效果 效果图 docx文件 xlsx文件 pdf文件 vue中简单案例 1、安装组件 整体安装…

LoongArch指令集-特权指令系统——摘抄自胡伟武体系结构和龙芯架构32位精简版参考手册

例外与中断 1 中断 1.1 中断类型 龙芯架构 32 位精简版下的中断采用线中断的形式。每个处理器核内部可记录 12 个线中断&#xff0c;分别是&#xff1a;1 个核间中断&#xff08;IPI&#xff09;&#xff0c;1 个定时器中断&#xff08;TI&#xff09;&#xff0c;8 个硬中断…

Muscles|Tissue —— Workflow

目录 Muscles pass Tissue pass Skin pass Simulation transfer Muscles pass Muscles & Tissue的第一阶段内&#xff0c;为模拟创建muscle pass&#xff0c;会创建solid肌肉几何体&#xff08;用动画骨骼移动和弯曲&#xff09;&#xff0c;然后驱动下游组织的大部分变…

1.SQL - 概述

1. SQL语句分类 • 数据定义语言&#xff1a;简称DDL(Data Definition Language)&#xff0c;用来定义数据库对象&#xff1a;数据库&#xff0c;表&#xff0c;列等。关键字&#xff1a;create&#xff0c;alter&#xff0c;drop等 • 数据操作语言&#xff1a;简称DML(Data …

13.鸿蒙HarmonyOS App(JAVA)文本框组件按钮点击提示

13.鸿蒙HarmonyOS App(JAVA)文本框按钮点击提示 点击按钮触发组件状态&#xff0c;点击改变颜色 文本框组件&#xff0c;文本居中&#xff0c;斜体&#xff0c;左右对齐&#xff0c;点击显示提示信息 Button button(Button) findComponentById(ResourceTable.Id_btn_1); but…

【cesium-5】鼠标交互与数据查询

scene.pick返回的是包含给定窗口位置基元的对象 scene.drillpack返回的是给定窗口位置所有对象的列表 Globe.pick返回的是给光线和地形的交点 Cesium.ScreenSpaceEventType.MIDDLE_CLICK 鼠标中间点击事件 Cesium.ScreenSpaceEventType.MOUSE_MOVE 鼠标移入事件 Cesium.ScreenS…

【自然语言处理】第2部分:识别文本中的个人身份信息

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

模拟EXCEL排序

7-78 模拟EXCEL排序 分数 25 全屏浏览题目 作者 陈越 单位 浙江大学 Excel可以对一组纪录按任意指定列排序。现请编写程序实现类似功能。 输入格式: 输入的第一行包含两个正整数N(≤105) 和C&#xff0c;其中N是纪录的条数&#xff0c;C是指定排序的列号。之后有 N行&am…

蓝桥杯c/c++程序设计——数位排序

数位排序【第十三届】【省赛】【C组】 题目描述 小蓝对一个数的数位之和很感兴趣&#xff0c;今天他要按照数位之和给数排序。 当两个数各个数位之和不同时&#xff0c;将数位和较小的排在前面&#xff0c;当数位之和相等时&#xff0c;将数值小的排在前面。 例如&#xff0…

Java—Throwing Exceptions

一、指定方法引发的异常 上一节展示了如何为ListOfNumbers类中的writeList&#xff08;&#xff09;方法编写异常处理程序。有时&#xff0c;代码捕获可能在其中发生的异常是适当的。然而&#xff0c;在其他情况下&#xff0c;最好让调用堆栈更上层的方法处理该异常。例如&…

echarts自定义鼠标移上去显示,自定义图例,自定义x轴显示

提示&#xff1a;记录一下echarts常用配置,以免后期忘记 1.自定义鼠标移上去效果 tooltip: { show: true, trigger: "axis", axisPointer: { type: "shadow",//默认自定义效果 }, // //自定义鼠标移上去效果 formatter: (v) > { console.log("打印…

postman入门使用

前言 对于postman的基础其实很容易上手实现&#xff0c;也有很多教程。 对于小编我来说&#xff0c;也基本可以实现开发任务。 但是今年我们的高级测试&#xff0c;搞了一下postman&#xff0c;省去很多工作&#xff0c;让我感觉很有必要学一下 这篇文章是在 高级测试工程师ht…

云计算:OpenStack 配置二层物理网卡为三层桥的接口

目录 一、理论 1.OpenStack 二、实验 1. Linux系统修改网卡 2.OpenStack 配置二层物理网卡为三层桥的接口 一、理论 1.OpenStack &#xff08;1&#xff09;概念 OpenStack是一个开源的云计算管理平台项目&#xff0c;是一系列软件开源项目的组合。由NASA(美国国家航空…

7.3 uvm_config_db in UVM

uvm_config_db类派生自uvm_resource_db类。它是uvm_resource_db顶部的另一层便利层&#xff0c;简化了用于uvm_component实例的基本接口&#xff08;资源库的访问方法&#xff09;。 下面uvm_config_db类的代码段取自uvm源代码。 class uvm_config_db#(type Tint) extends uv…