当前位置: 首页 > news >正文

【LeetCode】修炼之路-0007- Reverse Integer (整数反转)【python】

题目

  1. Reverse Integer
    Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.

Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

Example 1:

Input: x = 123
Output: 321

Example 2:

Input: x = -123
Output: -321

Example 3:

Input: x = 120
Output: 21

Constraints:

-2^31 <= x <= 2^31 - 1

基本思路

今天的题目对我们python新手非常友好,我们有两种思路,一种是转成字符串,反转加序号,一种是用数学的方式取余,余数*10,再加上下一步的取余。
很清晰的思路,唯一的坑就是转换的结果可能超过32位的上下界,判断输出的结果做一下限制。

注:使用python的我们要时刻把头埋低,比如用C语言解这个题,就没有转换成字符串的流畅解法,然后也不能在最后比较是不是越界,因为python的伪int类型是无限精度的,而c语言等,声明了32位int就是32位,需要计算前就进行判断,不然结果根本出不来。我们屏住呼吸,把这个题悄悄刷掉。嘘!

转换成字符串→反转字符串→还原符号→如果溢出就输出0→没问题就输出结果
这个比较简单直接给代码了

class Solution:def reverse(self, x: int) -> int:# 转为字符串,并处理符号s = str(abs(x))# 反转字符串res = int(s[::-1]) # 切片操作,见知识点# 还原符号if x < 0:res = -res# 检查是否溢出    if res > 2**31 - 1 or res < -2**31:return 0return res

在这里插入图片描述
这个结果多刷几次就会不一样,落点还是要在自己的算法是否足够优雅清晰
在这里插入图片描述

思路二

这个题当然也可以用res*10+x%10这种数学的方式去结题,而不用借助强制类型转换,热心的勇者赶快来试试!这里贴一下别人的代码,也不卖关子了

class Solution:def reverse(self, x: int) -> int:res = 0sign = -1 if x < 0 else 1x = abs(x)while(x > 0):res = res * 10 + x % 10x //= 10if res > 2**31 - 1:return 0return res * sign

知识点

python的slice切片

python的这个sequence对象切片,也是python的核心特性之一,这里只是蜻蜓点水的列了一些,更多的用法,还要在代码实践中多多体会才行。

基本语法

sequence[start:end:step]

参数说明

# start: 起始索引(包含)
# end: 结束索引(不包含)
# step: 步长,可正可负

基础用法

s = "Hello World"# 基本切片
print(s[0:5])     # "Hello"
print(s[:5])      # "Hello" (省略start)
print(s[6:])      # "World" (省略end)
print(s[:])       # "Hello World" (复制整个序列)# 使用负索引
print(s[-5:])     # "World"
print(s[:-6])     # "Hello"# 使用step
print(s[::2])     # "HloWrd" (每隔一个字符)
print(s[::-1])    # "dlroW olleH" (反转)

进阶理解

对于字符串s=“Hello World”

字符Hello(空格)World
正向索引012345678910
负向索引-11-10-9-8-7-6-5-4-3-2-1

一些奇怪的切片示例,这里的示例没有上下文,也不具备明显的逻辑动机,看起来不直观很正常,记住这里的::2, ::-1 就行。可以用来生成奇偶序列或者反转。

切片表达式结果说明
s[0:5]“Hello”从索引0到4(不包含5)
s[-5:]“World”从倒数第5个到结束
s[:5]“Hello”从开始到索引4
s[6:]“World”从索引6到结束
s[::2]“HloWrd”每隔一个字符取一个
s[::-1]“dlroW olleH”反转整个字符串
s[-5:-2]“Wor”从倒数第5个到倒数第3个
http://www.lryc.cn/news/469377.html

相关文章:

  • 【Flutter】页面布局:线性布局(Row 和 Column)
  • C语言巨难题:执行操作可获得的最大总奖励 I(C语言版)
  • 【力扣】GO解决子序列相关问题
  • Ubuntu20.04安装VM tools并实现主机和虚拟机之间文件夹共享
  • Linux 学习笔记(十七)—— 文件系统
  • 【计算机网络 - 基础问题】每日 3 题(五十八)
  • Netty入门基础:IO模型中BIO\NIO概念及区别【附演示代码】
  • vue2 使用环境变量
  • 数据预处理
  • django宠物领养管理系统-计算机毕业设计源码26858
  • 使用TeamViewer远程局域网内的两台电脑
  • GUI简介、Swing的常用组件、java程序的运行过程、class文件、JAR、runable_jar、双括号初始化
  • @Autowired和@Resource和getBean()区别
  • Merlion笔记(四):添加一个新的预测模型
  • 【论文阅读】ESRGAN
  • 电脑异常情况总结
  • [项目详解][boost搜索引擎#1] 概述 | 去标签 | 数据清洗 | scp
  • PL/I语言的起源?有C语言,有B语言和A语言吗?为什么shell脚本最开始可能有#!/bin/bash字样?为什么不支持嵌套注释?
  • gin入门教程(3):创建第一个 HTTP 服务器
  • Vue+ECharts+iView实现大数据可视化大屏模板
  • el-table 表格设置必填项
  • vivo 轩辕文件系统:AI 计算平台存储性能优化实践
  • Vue学习笔记(四)
  • 发送短信,验证码
  • 国内大语言模型哪家更好用?
  • OTP一次性密码、多因子认证笔记
  • 玉米生长阶段检测系统源码&数据集全套:改进yolo11-dysample
  • 【机器学习】决策树算法
  • P2818 天使的起誓
  • 数字信号处理实验简介