当前位置:网站首页>剑指offer基础版 ---- 第26天
剑指offer基础版 ---- 第26天
2022-07-31 05:09:00 【米兰的小红黑】
class Solution {
public int strToInt(String str) {
char[] arr = str.trim().toCharArray();
if(arr.length == 0){
return 0;
}
int i = 1;
int sign = 1;
long res = 0;
int sum = Integer.MAX_VALUE;
if(arr[0] == '-'){
sign = -1;
}else if(arr[0] != '+'){
i = 0;
}
for(int j = i; j < arr.length; j++){
if(arr[j] < '0' || arr[j] > '9'){
break;
}
res = res * 10 + (arr[j] -'0');
if(sign == 1){
if(res >= sum){
return sum;
}
}else if(sign == -1){
if(res > sum){
return Integer.MIN_VALUE;
}
}
}
return (int)(sign * res);
}
}
class Solution {
public boolean isNumber(String s) {
Map<State, Map<CharType, State>> transfer = new HashMap<State, Map<CharType, State>>();
Map<CharType, State> initialMap = new HashMap<CharType, State>() {
{
put(CharType.CHAR_SPACE, State.STATE_INITIAL);
put(CharType.CHAR_NUMBER, State.STATE_INTEGER);
put(CharType.CHAR_POINT, State.STATE_POINT_WITHOUT_INT);
put(CharType.CHAR_SIGN, State.STATE_INT_SIGN);
}};
transfer.put(State.STATE_INITIAL, initialMap);
Map<CharType, State> intSignMap = new HashMap<CharType, State>() {
{
put(CharType.CHAR_NUMBER, State.STATE_INTEGER);
put(CharType.CHAR_POINT, State.STATE_POINT_WITHOUT_INT);
}};
transfer.put(State.STATE_INT_SIGN, intSignMap);
Map<CharType, State> integerMap = new HashMap<CharType, State>() {
{
put(CharType.CHAR_NUMBER, State.STATE_INTEGER);
put(CharType.CHAR_EXP, State.STATE_EXP);
put(CharType.CHAR_POINT, State.STATE_POINT);
put(CharType.CHAR_SPACE, State.STATE_END);
}};
transfer.put(State.STATE_INTEGER, integerMap);
Map<CharType, State> pointMap = new HashMap<CharType, State>() {
{
put(CharType.CHAR_NUMBER, State.STATE_FRACTION);
put(CharType.CHAR_EXP, State.STATE_EXP);
put(CharType.CHAR_SPACE, State.STATE_END);
}};
transfer.put(State.STATE_POINT, pointMap);
Map<CharType, State> pointWithoutIntMap = new HashMap<CharType, State>() {
{
put(CharType.CHAR_NUMBER, State.STATE_FRACTION);
}};
transfer.put(State.STATE_POINT_WITHOUT_INT, pointWithoutIntMap);
Map<CharType, State> fractionMap = new HashMap<CharType, State>() {
{
put(CharType.CHAR_NUMBER, State.STATE_FRACTION);
put(CharType.CHAR_EXP, State.STATE_EXP);
put(CharType.CHAR_SPACE, State.STATE_END);
}};
transfer.put(State.STATE_FRACTION, fractionMap);
Map<CharType, State> expMap = new HashMap<CharType, State>() {
{
put(CharType.CHAR_NUMBER, State.STATE_EXP_NUMBER);
put(CharType.CHAR_SIGN, State.STATE_EXP_SIGN);
}};
transfer.put(State.STATE_EXP, expMap);
Map<CharType, State> expSignMap = new HashMap<CharType, State>() {
{
put(CharType.CHAR_NUMBER, State.STATE_EXP_NUMBER);
}};
transfer.put(State.STATE_EXP_SIGN, expSignMap);
Map<CharType, State> expNumberMap = new HashMap<CharType, State>() {
{
put(CharType.CHAR_NUMBER, State.STATE_EXP_NUMBER);
put(CharType.CHAR_SPACE, State.STATE_END);
}};
transfer.put(State.STATE_EXP_NUMBER, expNumberMap);
Map<CharType, State> endMap = new HashMap<CharType, State>() {
{
put(CharType.CHAR_SPACE, State.STATE_END);
}};
transfer.put(State.STATE_END, endMap);
int length = s.length();
State state = State.STATE_INITIAL;
for (int i = 0; i < length; i++) {
CharType type = toCharType(s.charAt(i));
if (!transfer.get(state).containsKey(type)) {
return false;
} else {
state = transfer.get(state).get(type);
}
}
return state == State.STATE_INTEGER || state == State.STATE_POINT || state == State.STATE_FRACTION || state == State.STATE_EXP_NUMBER || state == State.STATE_END;
}
public CharType toCharType(char ch) {
if (ch >= '0' && ch <= '9') {
return CharType.CHAR_NUMBER;
} else if (ch == 'e' || ch == 'E') {
return CharType.CHAR_EXP;
} else if (ch == '.') {
return CharType.CHAR_POINT;
} else if (ch == '+' || ch == '-') {
return CharType.CHAR_SIGN;
} else if (ch == ' ') {
return CharType.CHAR_SPACE;
} else {
return CharType.CHAR_ILLEGAL;
}
}
enum State {
STATE_INITIAL,
STATE_INT_SIGN,
STATE_INTEGER,
STATE_POINT,
STATE_POINT_WITHOUT_INT,
STATE_FRACTION,
STATE_EXP,
STATE_EXP_SIGN,
STATE_EXP_NUMBER,
STATE_END
}
enum CharType {
CHAR_NUMBER,
CHAR_EXP,
CHAR_POINT,
CHAR_SIGN,
CHAR_SPACE,
CHAR_ILLEGAL
}
}
边栏推荐
- Unity resources management series: Unity framework how to resource management
- 太厉害了,终于有人能把文件上传漏洞讲的明明白白了
- CentOS7 安装MySQL 图文详细教程
- 【一起学Rust】Rust学习前准备——注释和格式化输出
- Duplicate entry ‘XXX‘ for key ‘XXX.PRIMARY‘解决方案。
- numpy和pytorch中的元素拼接操作:stack,concatenat,cat
- Reference code series_1. Hello World in various languages
- MySQL optimization: from ten seconds to three hundred milliseconds
- Unity Framework Design Series: How Unity Designs Network Frameworks
- MySQL_关于JSON数据的查询
猜你喜欢
Moment Pool Cloud quickly installs packages such as torch-sparse and torch-geometric
MySQL事务隔离级别详解
Why use Flink and how to get started with Flink?
再见了繁琐的Excel,掌握数据分析处理技术就靠它了
matlab abel变换图片处理
CentOS7 —— yum安装mysql
Linux系统安装mysql(rpm方式安装)
1. 获取数据-requests.get()
MYSQL下载及安装完整教程
CentOS7 install MySQL graphic detailed tutorial
随机推荐
DVWA之SQL注入
mysql使用on duplicate key update批量更新数据
关于LocalDateTime的全局返回时间带“T“的时间格式处理
关于小白安装nodejs遇到的问题(npm WARN config global `--global`, `--local` are deprecated. Use `--location=glob)
docker安装postgresSQL和设置自定义数据目录
MySQL optimization slow log query
Three oj questions on leetcode
The monitoring of Doris study notes
Paginate the list collection and display the data on the page
mysql存储过程
tf.keras.utils.get_file()
mysql uses on duplicate key update to update data in batches
MySQL(更新中)
Flink sink ES 写入 ES(带密码)
精解四大集合框架:List 核心知识总结
.NET-6.WinForm2.NanUI learning and summary
a different object with the same identifier value was already associated with the session
SQL statement to range query time field
工作流编排引擎-Temporal
MySQL transaction (transaction) (this is enough..)