LeetCode随缘刷题之字符串转换整数
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随缘刷题之字符串转换整数的更多相关文章
- LeetCode随缘刷题之最长回文子串
这一题我用的相对比较笨的方法. 相对于大佬们用的动态规划法,比较复杂.但却更容易理解,我主要是通过记录下标来确定最长回文串的. package leetcode.day_12_06; /** * 给你 ...
- LeetCode随缘刷题之Java经典面试题将一个字符串数组进行分组输出,每组中的字符串都由相同的字符组成
今天给大家分享一个Java经典的面试题,题目是这样的: 本题是LeetCode题库中的49题. 将一个字符串数组进行分组输出,每组中的字符串都由相同的字符组成 举个例子:输入["eat&qu ...
- LeetCode随缘刷题之整数反转
package leetcode.day_01_29; /** * 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果. * 如果反转后整数超过 32 位的有符号整数的范围[− ...
- LeetCode随缘刷题之转化成小写字母
这道题应该是最简单的一道题了把,简直在侮辱我. package leetcode.day_12_12; /** * 709. 转换成小写字母 * 给你一个字符串 s ,将该字符串中的大写字母转换成相同 ...
- LeetCode随缘刷题之最短补全词
package leetcode.day_12_10; import org.junit.Test; /** * 给你一个字符串 licensePlate 和一个字符串数组 words ,请你找出并返 ...
- LeetCode随缘刷题之截断句子
这道题相对比较简单.正好最近学到StringBuilder就用了. package leetcode.day_12_06; /** * 句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前 ...
- Leetcode随缘刷题之寻找两个正序数组的中位数
我一上来没读清题,想着这题这么简单,直接就上手写了: package leetcode.day_12_05; import java.util.ArrayList; import java.util. ...
- LeetCode随缘刷题之无重复字符的最长子串
欢迎评论区交流. package leetcode.day_12_04; /** * 给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度. * <p> * 示例1: * &l ...
- LeetCode随缘刷题之赎金信
欢迎评论区讨论. package leetcode.day_12_04; /** * 为了不在赎金信中暴露字迹,从杂志上搜索各个需要的字母,组成单词来表达意思. * * 给你一个赎金信 (ransom ...
随机推荐
- 为EasySharding.EFCore提供Dapper相关查询扩展
承接上一篇博文中的中间件基本都是写入性的操作,但对于查询操作实际上是比较鸡肋的,如果单纯的查询,没有分表的情况下基本还能适应,这里为了Dapper提供了扩展 Dapper的扩展查询是需要写表名称的,所 ...
- centos7 自动交互expect 安装使用
1.安装 https://www.cnblogs.com/rocky-AGE-24/p/7256800.html 安装expect命令 两种方式yum安装 yum -y install expect ...
- Linux上天之路系列目录
Linux上天之路系列目录 Linux上天之路(一)之Linux前世今生 Linux上天之路(二)之Linux安装 Linux上天之路(三)之Linux系统目录 Linux上天之路(四)之Linux界 ...
- Struts-S2-045漏洞利用
最近也是在看Struts2的漏洞,这里与大家共同探讨一下,本次我复现的是s2-045这个编号的漏洞 漏洞介绍 Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-045,CVE编号C ...
- xxe-lab学习
0x00 前言 xxe-lab是一个一个包含php,java,python,C#等各种语言版本的XXE漏洞Demo这里附上下载链接https://github.com/c0ny1/xxe-lab我们用 ...
- Linux环境下的Docker的安装和部署、学习二
DockerFile体系结构(保留字指令) FROM:基础镜像,当前新镜像是基于哪个镜像的 MAINTAINER:镜像维护者的姓名和邮箱地址 RUN:容器构建时需要运行的命令 EXPOSE:当前容器对 ...
- 《剑指offer》面试题11. 旋转数组的最小数字
问题描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的 ...
- 记录未解决的问题:docker中无法启动mysqld
首先在docker中安装mysql server的包: sudo yum install mysql sudo yum install mariadb-server mariadb /usr/libe ...
- 分享一个学习cesiumjs的中文社区
在cesiumjs中文社区的时间线中我写到: 2018年10月10日 注册用户数51,日uv破100 Mark截图 2018年06月22日 上线测试 2018年06月19日 获得cesiumcn.or ...
- golang中结构体当做函数参数或函数返回值都会被拷贝
1. 结构体做函数的参数或返回值时,都会被重新拷贝一份如果不想拷贝,可以传递结构体指针 package main import "fmt" type Person struct { ...