leetcode--字符串转换为整数--python

news/2024/7/2 11:05:13

文章目录

  • 题目
    • 题目详情
    • 说明
    • 示例
  • 解题代码
    • 思路
    • 代码
    • 运行结果
    • 最佳方案

题目

题目详情

请你来实现一个 atoi 函数,使其能将字符串转换成整数。

首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。

当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。

注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。

在任何情况下,若函数不能进行有效的转换时,请返回 0。

说明

假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,qing返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。

示例

输入: "42"
输出: 42
输入: "   -42"
输出: -42
解释: 第一个非空白字符为 '-', 它是一个负号。我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42
输入: "4193 with words"
输出: 4193
解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
输入: "words and 987"
输出: 0
解释: 第一个非空字符是 'w', 但它不是数字或正、负号。因此无法执行有效的转换。
输入: "-91283472332"
输出: -2147483648
解释: 数字 "-91283472332" 超过 32 位有符号整数范围。 因此返回 INT_MIN (231)

解题代码

思路

目的是把字符串转换为整数

  1. 那么就要按照题目要求的去除其中的空格
  2. 再运用正则匹配出里面的数字
  3. 判断是否超过了32位整数的大小
  4. 最后得出结论

代码

import re
class Solution:def myAtoi(self,x):if x == "" or x.strip() == "" or not x: return 0x = x.strip()   #去掉空格parrent = re.compile(u'^[+,-]?]\d+')   #匹配数字ret = parrent.findall(x)if len(ret) == 0: return 0     if int(ret[0]) < -2 ** 31:return -2 ** 31if int(ret[0]) > 2 ** 31 - 1:return 2 ** 31 - 1return int(ret[0])

运行结果

在这里插入图片描述

最佳方案

在最优时间里面的一位大佬的方案,也是运用正则的思想取出数据,用时44ms:

class Solution:def myAtoi(self, str: str) -> int:import reres = re.findall("^[\+\-]?\d+",str.strip())# res = re.findall(r"^[\+\-]?\d+",str.strip())if len(res)!= 0:if int(res[0])>2**31-1:return (2**31-1)if int(res[0])<-2**31:return (-2**31)return int(res[0])else:return 0

http://lihuaxi.xjx100.cn/news/242950.html

相关文章

事件总线demo

经过几天的努力拜读大牛高手文章&#xff0c;终于对事件总线有所了解&#xff0c;特此记录下来&#xff0c;以免忘记 1、定义相关的接口&#xff1a; A 事件接口 1 public interface IDomainEvent2 {3 DateTime OccurredOn();4 5 /// <summary>6 …

参加java培训,要避免这几个误区!

​ java技术在近几年学习的人越来越多&#xff0c;小编在这里提醒同学们&#xff0c;想要学好java技术&#xff0c;除了报班系统培训之外&#xff0c;还要找到适合自己的学习方法&#xff0c;以下几点误区同学们一定要避免! ​  参加java培训&#xff0c;要避免这几个误区! 1…

leetcode--删除排序数组中的重复项--python

文章目录题目题目详情示例说明解题代码思路代码运行结果最佳方案题目 题目详情 给定一个排序数组&#xff0c;你需要在原地删除重复出现的元素&#xff0c;使得每个元素只出现一次&#xff0c;返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在原地修改…

Android中对Log日志文件的分析[转]

一&#xff0c;Bug出现了&#xff0c; 需要“干掉”它 bug一听挺吓人的&#xff0c;但是只要你懂了&#xff0c;android里的bug是很好解决的&#xff0c;因为android里提供了LOG机制&#xff0c;具体的底层代码&#xff0c;以后在来分析&#xff0c;只要你会看bug&#xff0c;a…

转:C#中Monitor对象与Lock关键字的区别分析

Monitor对象1.Monitor.Enter(object)方法是获取 锁&#xff0c;Monitor.Exit(object)方法是释放锁&#xff0c;这就是Monitor最常用的两个方法&#xff0c;当然在使用过程中为了避免获取锁之后因为异常&#xff0c;致锁 无法释放&#xff0c;所以需要在try{} catch(){}之后的fi…

接口测试要如何做数据准备

数据准备是接口测试过程中不可或缺的一步&#xff0c;也是花费时间很长的工作&#xff0c;因为程序的功能就是处理数据。那么在接口测试中&#xff0c;我们要怎样来准备数据呢?小编整理了以下一些关于数据准备的方法&#xff0c;希望对大家能有所帮助。 数据准备分为两种类型&…

舆情,文本挖掘

MLE&#xff0c;MAP&#xff0c;EM 和 point estimation 之间的关系是怎样的 和点估计相对应的是区间估计&#xff0c;这个一般入门的统计教材里都会讲。直观说&#xff0c;点估计一般就是要找概率密度曲线上值最大的那个点&#xff0c;区间估计则要寻找该曲线上满足某种条件的…

leetcode--删除排序链表中的重复元素--python

文章目录题目题目详情示例解题代码思路代码运行结果最佳方案题目 题目详情 给定一个排序链表&#xff0c;删除所有重复的元素&#xff0c;使得每个元素只出现一次。 示例 输入: 1->1->2 输出: 1->2输入: 1->1->2->3->3 输出: 1->2->3解题代码 …