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 ...
随机推荐
- MongoDB分片集群机制及原理
1. MongoDB常见的部署架构 * 单机版 * 复制集 * 分片集群 2. 为什么要使用分片集群 * 数据容量日益增大,访问性能日渐下降,怎么破? * 新品上线异常火爆,如何支撑更多用户并发? * ...
- Star Way To Heaven
题目描述 小 x伤心的走上了 Star way to heaven. 到天堂的道路是一个笛卡尔坐标系上一个 n*m的长方形通道 顶点在0,0 和 . 小 n,m 从最左边任意一点进入,从右边任意一点走 ...
- js对象数组多字段排序
来源:js对象数组按照多个字段进行排序 一.数组排序 Array.sort()方法可以传入一个函数作为参数,然后依据该函数的逻辑,进行数组的排序. 一般用法:(数组元素从小大进行排序) var a = ...
- 使用.NET 6开发TodoList应用(26)——实现Configuration和Option的强类型绑定
系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 在上一篇文章使用.NET 6开发TodoList应用(25)--实现RefreshToken中,我们通过使用Configura ...
- 【PTA】6-1 **删除C程序中的注释 (31 分)
请你编写一个函数,将C语言源程序中的注释全部删去. 函数原型 // 删除注释 void Pack(FILE *src, FILE *dst); 说明:参数 src 和 dst 均为文件指针,其中:sr ...
- CTF-sql-宽字节注入
本文章主要涉及sql宽字节注入注入的原理讲解,如有错误,望指出.(附有目录,如需查看请点右下角) 一.首先介绍一下本篇文章所用到的知识点: 常用到的url编码: 空格:%20 单引号:%27 在sql ...
- spring 事务传播性
一.什么是事务传播性 大白话讲就是,方法之间互相调用的时候,事务如何传播,比如A()调用B(),B()的事务是和A()共用一个事务(失败一起提交)? 还是新事务(两者事务互不影响)?,还是说B()不需 ...
- 从零开始, 开发一个 Web Office 套件 (1): 富文本编辑器
这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office 套件, 包括: 文档, 表格, 幻灯片... 等等. 富文本编辑器 万里长征 ...
- 一种Django多租户解决方案
什么是多租户? 多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下(此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用户间数据的隔离性. 多租 ...
- python函数关键字实参传参
#!/usr/bin/python #coding=utf-8 #好好学习,天天向上 def describe_pet(type,name): print(f"i have a {type} ...