第八题:字符串转换整数 (atoi)

2024-09-04 01:52

本文主要是介绍第八题:字符串转换整数 (atoi),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

实现 myAtoi(string s) 函数,将字符串转换成 32 位有符号整数。函数首先丢弃字符串前面的空格字符,直到找到第一个非空格字符为止。然后,选择该非空格字符和之后的连续字符组成一个存储整数的字符串。字符串可以包含额外字符,这些字符在形成整数的字符串后面,并被忽略。如果第一个非空格字符不是数字且不是符号+ 或者-,则不进行转换并返回 0。如果转换过程中存在任何无法识别的字符,则提前停止转换,并返回已经得到的结果。如果转换后的结果超过 32 位有符号整数范围 [−2^31, 2^31 − 1],则返回整数边界。

实现思路

  1. 忽略字符串前导空格。
  2. 检查是否有正负号,并初始化结果变量。
  3. 从第一个非空字符开始,逐个检查是否为数字。
  4. 如果遇到非数字字符,停止处理。
  5. 将数字字符转换为整数并累加到结果中。
  6. 检查结果是否溢出,并在必要时修正结果。
  7. 返回最终结果。

算法实现

C

int myAtoi(char *str) {long res = 0;int i = 0, sign = 1;while (str[i] == ' ') i++; // 忽略前导空格if (str[i] == '-' || str[i] == '+') { // 处理正负号sign = (str[i++] == '-') ? -1 : 1;}while (str[i]) {if (str[i] >= '0' && str[i] <= '9') {res = res * 10 + (str[i++] - '0');if (res > INT_MAX) return (sign == -1) ? INT_MIN : INT_MAX; // 检查溢出} else break; // 非数字字符,停止处理}return res * sign; // 应用正负号
}

Python

def myAtoi(s: str) -> int:import res = s.lstrip()if not s: return 0match = re.match(r"^[+-]?(\d+)", s)if not match: return 0result = int(match.group(0))return max(min(result, 2**31 - 1), -2**31)

Java

public int myAtoi(String s) {long result = 0;int sign = 1;int index = 0;int n = s.length();// 忽略前导空格while (index < n && s.charAt(index) == ' ') index++;// 处理正负号if (index < n && (s.charAt(index) == '+' || s.charAt(index) == '-')) {sign = s.charAt(index++) == '+' ? 1 : -1;}// 转换数字并检查溢出while (index < n && Character.isDigit(s.charAt(index))) {int digit = s.charAt(index++) - '0';if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && digit > 7)) {return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;}result = 10 * result + digit;}return (int) (sign * result);
}

时间复杂度

时间复杂度为 O(n),其中 n 是字符串的长度。这是因为算法需要遍历整个字符串来查找数字并计算结果。空间复杂度为 O(1),因为使用的额外空间不依赖于输入字符串的大小。

这篇关于第八题:字符串转换整数 (atoi)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

使用Python实现网页表格转换为markdown

《使用Python实现网页表格转换为markdown》在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,本文将使用Python编写一个网页表格转Markdown工具,需... 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或

golang float和科学计数法转字符串的实现方式

《golangfloat和科学计数法转字符串的实现方式》:本文主要介绍golangfloat和科学计数法转字符串的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望... 目录golang float和科学计数法转字符串需要对float转字符串做处理总结golang float

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

MySQL 字符串截取函数及用法详解

《MySQL字符串截取函数及用法详解》在MySQL中,字符串截取是常见的操作,主要用于从字符串中提取特定部分,MySQL提供了多种函数来实现这一功能,包括LEFT()、RIGHT()、SUBST... 目录mysql 字符串截取函数详解RIGHT(str, length):从右侧截取指定长度的字符SUBST

Python将字符串转换为小写字母的几种常用方法

《Python将字符串转换为小写字母的几种常用方法》:本文主要介绍Python中将字符串大写字母转小写的四种方法:lower()方法简洁高效,手动ASCII转换灵活可控,str.translate... 目录一、使用内置方法 lower()(最简单)二、手动遍历 + ASCII 码转换三、使用 str.tr

Java如何将文件内容转换为MD5哈希值

《Java如何将文件内容转换为MD5哈希值》:本文主要介绍Java如何将文件内容转换为MD5哈希值的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java文件内容转换为MD5哈希值一个完整的Java示例代码代码解释注意事项总结Java文件内容转换为MD5

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

Java实现视频格式转换的完整指南

《Java实现视频格式转换的完整指南》在Java中实现视频格式的转换,通常需要借助第三方工具或库,因为视频的编解码操作复杂且性能需求较高,以下是实现视频格式转换的常用方法和步骤,需要的朋友可以参考下... 目录核心思路方法一:通过调用 FFmpeg 命令步骤示例代码说明优点方法二:使用 Jaffree(FF

Java如何用乘号来重复字符串的功能

《Java如何用乘号来重复字符串的功能》:本文主要介绍Java使用乘号来重复字符串的功能,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java乘号来重复字符串的功能1、利用循环2、使用StringBuilder3、采用 Java 11 引入的String.rep