package leetcode.day_01_29;

import java.util.regex.Matcher;
import java.util.regex.Pattern; /**
* 请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
* <p>
* 函数myAtoi(string s) 的算法如下:
* <p>
* 读入字符串并丢弃无用的前导空格
* 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
* 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
* 将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
* 如果整数数超过 32 位有符号整数范围 [−231, 231− 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231− 1 的整数应该被固定为 231 − 1 。
* 返回整数作为最终结果。
* 注意:
* <p>
* 本题中的空白字符只包括空格字符 ' ' 。
* 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。
* <p>
* 示例1:
* <p>
* 输入:s = "42"
* 输出:42
* 解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。
* 第 1 步:"42"(当前没有读入字符,因为没有前导空格)
* ^
* 第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
* ^
* 第 3 步:"42"(读入 "42")
* ^
* 解析得到整数 42 。
* 由于 "42" 在范围 [-231, 231 - 1] 内,最终结果为 42 。
* 示例2:
* <p>
* 输入:s = " -42"
* 输出:-42
* 解释:
* 第 1 步:" -42"(读入前导空格,但忽视掉)
* ^
* 第 2 步:" -42"(读入 '-' 字符,所以结果应该是负数)
* ^
* 第 3 步:" -42"(读入 "42")
* ^
* 解析得到整数 -42 。
* 由于 "-42" 在范围 [-231, 231 - 1] 内,最终结果为 -42 。
* 示例3:
* <p>
* 输入:s = "4193 with words"
* 输出:4193
* 解释:
* 第 1 步:"4193 with words"(当前没有读入字符,因为没有前导空格)
* ^
* 第 2 步:"4193 with words"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
* ^
* 第 3 步:"4193 with words"(读入 "4193";由于下一个字符不是一个数字,所以读入停止)
* ^
* 解析得到整数 4193 。
* 由于 "4193" 在范围 [-231, 231 - 1] 内,最终结果为 4193 。
* 示例4:
* <p>
* 输入:s = "words and 987"
* 输出:0
* 解释:
* 第 1 步:"words and 987"(当前没有读入字符,因为没有前导空格)
* ^
* 第 2 步:"words and 987"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
* ^
* 第 3 步:"words and 987"(由于当前字符 'w' 不是一个数字,所以读入停止)
* ^
* 解析得到整数 0 ,因为没有读入任何数字。
* 由于 0 在范围 [-231, 231 - 1] 内,最终结果为 0 。
* 示例5:
* <p>
* 输入:s = "-91283472332"
* 输出:-2147483648
* 解释:
* 第 1 步:"-91283472332"(当前没有读入字符,因为没有前导空格)
* ^
* 第 2 步:"-91283472332"(读入 '-' 字符,所以结果应该是负数)
* ^
* 第 3 步:"-91283472332"(读入 "91283472332")
* ^
* 解析得到整数 -91283472332 。
* 由于 -91283472332 小于范围 [-231, 231 - 1] 的下界,最终结果被截断为 -231 = -2147483648 。
* <p>
* 提示:
* 0 <= s.length <= 200
* s 由英文字母(大写和小写)、数字(0-9)、' '、'+'、'-' 和 '.' 组成
*
* @author soberw
* @Classname Atoi0008
* @Description
* @Date 2022-01-29 22:52
*/
public class Atoi0008 {
public int myAtoi(String s) {
s = s.trim();
if (s.length() == 0) {
return 0;
}
boolean flag = false;
if (s.charAt(0) == '-') {
flag = true;
s = s.substring(1);
} else if (s.charAt(0) == '+') {
s = s.substring(1);
}
// Pattern p = Pattern.compile("[+|-]?[0-9]+");
Pattern p = Pattern.compile("[0-9]+");
Matcher m = p.matcher(s);
String temp;
if (m.find()) {
temp = m.group();
} else {
return 0;
}
if (!s.startsWith(temp)) {
return 0;
}
int finals;
try {
finals = Integer.parseInt(temp);
} catch (Exception e) {
return flag ? Integer.MIN_VALUE : Integer.MAX_VALUE;
}
return flag ? -finals : finals;
} public static void main(String[] args) {
Atoi0008 a = new Atoi0008();
System.out.println(a.myAtoi("+-12"));
}
}

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. Java中的对象、类、抽象类、接口的理解

    1.对象 对象是个具体的东西,有着明确的属性特征和行为特征. 例如:你手上牵着的女朋友或男朋友就是个具体的对象. 如图中的苏格兰折耳猫,特征是耳朵向下呈折叠状,有着具体的颜色(你看到的颜色),并且和其 ...

  2. WPF使用MVVM(一)-属性绑定

    WPF使用MVVM(一)-属性绑定 简单介绍MVVM MVVM是Model(数据类型),View(界面),ViewModel(数据与界面之间的桥梁)的缩写,是一种编程模式,优点一劳永逸,初步增加一些逻 ...

  3. CSS基础 水平居中案例

    html结构 <body> <div class="father"> <div class="son"></div&g ...

  4. python 使用@property 操作属性时,报“RecursionError:maximun recursion depth exceeded”

    使用@property获取和修改属性,出现报错"RecursionError:maximun recursion depth exceeded",超过了最大的递归深度 原因: 方法 ...

  5. spring cloud --- Feign --- 心得

    spring boot      1.5.9.RELEASE spring cloud    Dalston.SR1 1.前言 什么是Feign? 为了简化我们的开发,Spring Cloud Fei ...

  6. VM和CentOS7安装教程

    如果图片损坏,点击链接:https://www.toutiao.com/i6491076101664670222/ 安装软件 VMware_workstation_full_12.5.2 CentOS ...

  7. 微信小程序自定义导航栏组件

    1.首先,要在json文件中设置为自定义的形式 "navigationStyle": "custom" 2.计算相关值 导航栏分为状态栏和标题栏,只要能算出每台 ...

  8. PkavHTTPFuzzer爆破带验证码的后台密码

    之前对暴力破解这块并没有做系统的总结,况且登录这块也是个重头戏,所以我想总结总结. 环境准备 1.用phpstudy搭建phpwms1.1.2演示环境 2.pkavhttpfuzzer工具 漏洞复现 ...

  9. Keil MDK STM32系列(八) STM32F4基于HAL的PWM和定时器输出音频

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  10. 《剑指offer》面试题53 - I. 在排序数组中查找数字 I

    问题描述 统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2: 输入: nums = [5,7,7,8, ...