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

秀山微信网站建设安徽省工程信息网官网

秀山微信网站建设,安徽省工程信息网官网,上海建网站工作室,适合大学生做的网站《算法通关村——不简单的字符串转换问题》 8. 字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入…

《算法通关村——不简单的字符串转换问题》

8. 字符串转换整数 (atoi)

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

  1. 读入字符串并丢弃无用的前导空格
  2. 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
  3. 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
  4. 将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
  5. 如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1
  6. 返回整数作为最终结果。

注意:

  • 本题中的空白字符只包括空格字符 ' '
  • 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

示例 1:

输入:s = "42"
输出:42
解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。
第 1 步:"42"(当前没有读入字符,因为没有前导空格)^
第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+')^
第 3 步:"42"(读入 "42")^
解析得到整数 42 。
由于 "42" 在范围 [-231, 231 - 1] 内,最终结果为 42 。

示例 2:

输入:s = "   -42"
输出:-42
解释:
第 1 步:"   -42"(读入前导空格,但忽视掉)^
第 2 步:"   -42"(读入 '-' 字符,所以结果应该是负数)^
第 3 步:"   -42"(读入 "42")^
解析得到整数 -42 。
由于 "-42" 在范围 [-231, 231 - 1] 内,最终结果为 -42 。

示例 3:

输入:s = "4193 with words"
输出:4193
解释:
第 1 步:"4193 with words"(当前没有读入字符,因为没有前导空格)^
第 2 步:"4193 with words"(当前没有读入字符,因为这里不存在 '-' 或者 '+')^
第 3 步:"4193 with words"(读入 "4193";由于下一个字符不是一个数字,所以读入停止)^
解析得到整数 4193 。
由于 "4193" 在范围 [-231, 231 - 1] 内,最终结果为 4193 。

提示:

  • 0 <= s.length <= 200
  • s 由英文字母(大写和小写)、数字(0-9)、' ''+''-''.' 组成

题解

public static int myAtoi(String str) {int len = str.length();char[] charArray = str.toCharArray();// 1、去除前导空格int index = 0;while (index < len && charArray[index] == ' ') {index++;}// 2、如果已经遍历完成(针对极端用例 "      ")if (index == len) {return 0;}// 3、如果出现符号字符,仅第 1 个有效,并记录正负int sign = 1;char firstChar = charArray[index];if (firstChar == '+') {index++;} else if (firstChar == '-') {index++;sign = -1;}// 4、将后续出现的数字字符进行转换// 不能使用 long 类型,这是题目说的int res = 0;while (index < len) {char currChar = charArray[index];// 4.1 先判断不合法的情况if (currChar > '9' || currChar < '0') {break;}// 题目中说只能存储 32 位大小的有符号整数,下面两个if分别处理整数和负数的情况。// 提前判断乘以10以后是否越界,但res*10可能会越界,所以这里使用Integer.MAX_VALUE/10,这样一定不会越界。// 这是解决溢出问题的经典处理方式if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && (currChar - '0') > Integer.MAX_VALUE % 10)) {return Integer.MAX_VALUE;}if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && (currChar - '0') > -(Integer.MIN_VALUE % 10))) {return Integer.MIN_VALUE;}// 合法的情况下,才考虑转换,每一步都把符号位乘进去// 想想这里为什么要带着sign乘res = res * 10 + sign * (currChar - '0');index++;}return res;}

点击链接:我正在「编程导航」和朋友们讨论有趣的话题,你⼀起来吧?

也可以加我QQ(2837468248)咨询说明来意!

http://www.yayakq.cn/news/282238/

相关文章:

  • 专门做行测题的网站一个电商网站开发要多久
  • 安庆公司做网站织梦音乐网站
  • 电子商务的网站开发网站群建设优点
  • 杨凌网站建设推广西安营销型网站建设动力无限
  • 网站成功案例分析美的公司网站建设的目的
  • 确定网站设计公司简报无锡网站建设 网站制作
  • 无锡正规网站建设如何做游戏软件
  • 阜南做网站公司学生管理系统 静态网站源码
  • 如何建电子商务网站网站建设流量是怎么回事
  • asp.net 3.5网站开发实例教程蓝顿长沙网站制作公司
  • 网站开发可以用哪些语言网店网站设计
  • 网站怎样恶意刷未来科技
  • 做宣传的网站有哪些网站建设及维护
  • 深圳网站建设服务器公司网站seo检测
  • 专做蓝领招聘网站有哪些ci框架的网站
  • 苏州公司建设网站首页阿里网站建设App开发
  • 创建一个网站网站空间费用自己电脑做网站还用备案
  • 高校部门网站建设联想电脑网站建设策划书
  • 常用网站开发工具asp网站开发教案
  • 焦作网站制作龙城区建设局网站
  • 湘潭网站建设 要选磐石网络wordpress视频滑块
  • 网站制作乛薇玉林住房和城乡建设局网站官网
  • 做网站需要投入多少钱想做个外贸网站
  • 浙江杰立建设集团 网站首页wordpress网站阿里云备案号
  • 网站推广效果的评价指标做一个网站赚钱吗
  • 如何做彩票网站的教程网站建设设计岗位职责
  • 公司做彩票网站违法吗wordpress 预览
  • 如何做网站百度排名优化wordpress+php要求
  • 谷歌外贸建站长沙网站外包
  • 专门做兼职的网站有哪些建设网站是什么关系