1. package leetcode.day_01_29;
  2. import java.util.regex.Matcher;
  3. import java.util.regex.Pattern;
  4. /**
  5. * 请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
  6. * <p>
  7. * 函数myAtoi(string s) 的算法如下:
  8. * <p>
  9. * 读入字符串并丢弃无用的前导空格
  10. * 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
  11. * 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
  12. * 将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
  13. * 如果整数数超过 32 位有符号整数范围 [−231, 231− 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231− 1 的整数应该被固定为 231 − 1 。
  14. * 返回整数作为最终结果。
  15. * 注意:
  16. * <p>
  17. * 本题中的空白字符只包括空格字符 ' ' 。
  18. * 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。
  19. * <p>
  20. * 示例1:
  21. * <p>
  22. * 输入:s = "42"
  23. * 输出:42
  24. * 解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。
  25. * 第 1 步:"42"(当前没有读入字符,因为没有前导空格)
  26. * ^
  27. * 第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
  28. * ^
  29. * 第 3 步:"42"(读入 "42")
  30. * ^
  31. * 解析得到整数 42 。
  32. * 由于 "42" 在范围 [-231, 231 - 1] 内,最终结果为 42 。
  33. * 示例2:
  34. * <p>
  35. * 输入:s = " -42"
  36. * 输出:-42
  37. * 解释:
  38. * 第 1 步:" -42"(读入前导空格,但忽视掉)
  39. * ^
  40. * 第 2 步:" -42"(读入 '-' 字符,所以结果应该是负数)
  41. * ^
  42. * 第 3 步:" -42"(读入 "42")
  43. * ^
  44. * 解析得到整数 -42 。
  45. * 由于 "-42" 在范围 [-231, 231 - 1] 内,最终结果为 -42 。
  46. * 示例3:
  47. * <p>
  48. * 输入:s = "4193 with words"
  49. * 输出:4193
  50. * 解释:
  51. * 第 1 步:"4193 with words"(当前没有读入字符,因为没有前导空格)
  52. * ^
  53. * 第 2 步:"4193 with words"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
  54. * ^
  55. * 第 3 步:"4193 with words"(读入 "4193";由于下一个字符不是一个数字,所以读入停止)
  56. * ^
  57. * 解析得到整数 4193 。
  58. * 由于 "4193" 在范围 [-231, 231 - 1] 内,最终结果为 4193 。
  59. * 示例4:
  60. * <p>
  61. * 输入:s = "words and 987"
  62. * 输出:0
  63. * 解释:
  64. * 第 1 步:"words and 987"(当前没有读入字符,因为没有前导空格)
  65. * ^
  66. * 第 2 步:"words and 987"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
  67. * ^
  68. * 第 3 步:"words and 987"(由于当前字符 'w' 不是一个数字,所以读入停止)
  69. * ^
  70. * 解析得到整数 0 ,因为没有读入任何数字。
  71. * 由于 0 在范围 [-231, 231 - 1] 内,最终结果为 0 。
  72. * 示例5:
  73. * <p>
  74. * 输入:s = "-91283472332"
  75. * 输出:-2147483648
  76. * 解释:
  77. * 第 1 步:"-91283472332"(当前没有读入字符,因为没有前导空格)
  78. * ^
  79. * 第 2 步:"-91283472332"(读入 '-' 字符,所以结果应该是负数)
  80. * ^
  81. * 第 3 步:"-91283472332"(读入 "91283472332")
  82. * ^
  83. * 解析得到整数 -91283472332 。
  84. * 由于 -91283472332 小于范围 [-231, 231 - 1] 的下界,最终结果被截断为 -231 = -2147483648 。
  85. * <p>
  86. * 提示:
  87. * 0 <= s.length <= 200
  88. * s 由英文字母(大写和小写)、数字(0-9)、' '、'+'、'-' 和 '.' 组成
  89. *
  90. * @author soberw
  91. * @Classname Atoi0008
  92. * @Description
  93. * @Date 2022-01-29 22:52
  94. */
  95. public class Atoi0008 {
  96. public int myAtoi(String s) {
  97. s = s.trim();
  98. if (s.length() == 0) {
  99. return 0;
  100. }
  101. boolean flag = false;
  102. if (s.charAt(0) == '-') {
  103. flag = true;
  104. s = s.substring(1);
  105. } else if (s.charAt(0) == '+') {
  106. s = s.substring(1);
  107. }
  108. // Pattern p = Pattern.compile("[+|-]?[0-9]+");
  109. Pattern p = Pattern.compile("[0-9]+");
  110. Matcher m = p.matcher(s);
  111. String temp;
  112. if (m.find()) {
  113. temp = m.group();
  114. } else {
  115. return 0;
  116. }
  117. if (!s.startsWith(temp)) {
  118. return 0;
  119. }
  120. int finals;
  121. try {
  122. finals = Integer.parseInt(temp);
  123. } catch (Exception e) {
  124. return flag ? Integer.MIN_VALUE : Integer.MAX_VALUE;
  125. }
  126. return flag ? -finals : finals;
  127. }
  128. public static void main(String[] args) {
  129. Atoi0008 a = new Atoi0008();
  130. System.out.println(a.myAtoi("+-12"));
  131. }
  132. }

LeetCode随缘刷题之字符串转换整数的更多相关文章

  1. LeetCode随缘刷题之最长回文子串

    这一题我用的相对比较笨的方法. 相对于大佬们用的动态规划法,比较复杂.但却更容易理解,我主要是通过记录下标来确定最长回文串的. package leetcode.day_12_06; /** * 给你 ...

  2. LeetCode随缘刷题之Java经典面试题将一个字符串数组进行分组输出,每组中的字符串都由相同的字符组成

    今天给大家分享一个Java经典的面试题,题目是这样的: 本题是LeetCode题库中的49题. 将一个字符串数组进行分组输出,每组中的字符串都由相同的字符组成 举个例子:输入["eat&qu ...

  3. LeetCode随缘刷题之整数反转

    package leetcode.day_01_29; /** * 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果. * 如果反转后整数超过 32 位的有符号整数的范围[− ...

  4. LeetCode随缘刷题之转化成小写字母

    这道题应该是最简单的一道题了把,简直在侮辱我. package leetcode.day_12_12; /** * 709. 转换成小写字母 * 给你一个字符串 s ,将该字符串中的大写字母转换成相同 ...

  5. LeetCode随缘刷题之最短补全词

    package leetcode.day_12_10; import org.junit.Test; /** * 给你一个字符串 licensePlate 和一个字符串数组 words ,请你找出并返 ...

  6. LeetCode随缘刷题之截断句子

    这道题相对比较简单.正好最近学到StringBuilder就用了. package leetcode.day_12_06; /** * 句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前 ...

  7. Leetcode随缘刷题之寻找两个正序数组的中位数

    我一上来没读清题,想着这题这么简单,直接就上手写了: package leetcode.day_12_05; import java.util.ArrayList; import java.util. ...

  8. LeetCode随缘刷题之无重复字符的最长子串

    欢迎评论区交流. package leetcode.day_12_04; /** * 给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度. * <p> * 示例1: * &l ...

  9. LeetCode随缘刷题之赎金信

    欢迎评论区讨论. package leetcode.day_12_04; /** * 为了不在赎金信中暴露字迹,从杂志上搜索各个需要的字母,组成单词来表达意思. * * 给你一个赎金信 (ransom ...

随机推荐

  1. 『无为则无心』Python函数 — 29、Python变量和参数传递

    目录 1.Python的变量 (1)Python变量不能独立存在 (2)变量是内存中数据的引用 (3)注意点 2.了解变量的引用 3.Python的参数传递(重点) (1)示例 (2)结论 (3)总结 ...

  2. Centos7安装maxscale 实现mysql的读写分离

    安装依赖 yum install -y novacom-server.x86_64 libaio.x86_64 libaio-devel.x86_64 网站下载 https://downloads.m ...

  3. 解决zabbix server is running | No 的方法

    Zabbix 的简介 Zabbix 可以监控网络和服务的运行状况,Zabbix 利用灵活的告警机制,允许用户对事件发送基于 Email 的告警.但最近在使用的时候遇到一个问题. 这篇文章主要给大家介绍 ...

  4. 虚拟机上CentOS7网络配置

    如果图片损坏:点击链接:https://www.toutiao.com/i6493449418249863693/ 设置网络 首先打开虚拟网络编辑器 权限打开 选择NAT模式,设置IP 应用确定之后, ...

  5. nuxt中报window is not defined

    1.如果是引用插件报错的话,原因是在服务端渲染时找不到window,这样在插件引入位置把ssr设置为false即可. plugins: [ { src: '@/plugins/iview', ssr: ...

  6. vue-json-editor可视化编辑器的介绍与应用

    vue-json-editor可视化编辑器 最近项目中有用到json编辑器,我选用了这款vue的编辑器,看起来也是比较简洁,接下来就具体介绍一下它,以及内部属性. 一.vue-json-editor的 ...

  7. python2.7发送邮件失败之——SMTPAuthenticationError问题

    使用python2.7发送邮件,代码如下: from email.header import Headerfrom email.mime.text import MIMETextimport smtp ...

  8. Android学习笔记5

    SharedPreferenced的使用方法:SharedPreferences 是一个轻量级的存储类,主要是保存一些小的数据,一些状态信息 第一步:初始化         * 获取SharedPre ...

  9. linux中uniq命令全面解析

    目录 一 :uniq作用 二:uniq格式 1.参数 2.参数案例解析: linuxuniq简介 Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用. u ...

  10. 二进制方式搭建Kubernetes高可用集群

    转:https://jiangxl.blog.csdn.net/article/details/120428703 详细:https://developer.aliyun.com/article/78 ...