leetcode初级算法6.字符串转整数(atoi)
leetcode初级算法6.字符串转整数(atoi)
仅为个人刷题记录,不提供解题思路
题解与收获
我的解法:
public int myAtoi(String s) {//避免魔法值先设spaceString space = " ";//如果是空或者是一串空字符串就滚回去!if(s == null || s.replace(space,"").equals("")){return 0;}//拆分s字符串char[] chars = s.toCharArray();int length = chars.length;//记录空格的数量int count = 0;//最后整数的符号,默认为正String symbol = "+";//用来拼接符号和数字的变量,一会要转成long类型String result = "";//通过下面的循环定位到前置若干个空格的下一个字符for(int i = 0; i < length; i++){if(chars[i] == ' '){count++;}else{break;}}//如果是负号if(chars[count] == '-'){result += "-";symbol = "-";count++;}else if(chars[count] == '+'){//如果是正号count++;}else if(Character.isDigit(chars[count])){//如果是数字,就默认返回的数字为正result += chars[count++];}else{//既不是数字也不是+,-,说明是其他字符,直接返回0return 0;}//遍历后面的字符,是数字就加上,不是就直接break掉for(int i = count; i < length; i++){if(Character.isDigit(chars[i])){result += chars[i];}else{break;}}//可能出现下面两种情况,出现了就立马return 0;if(result.equals("-") || "".equals(result)){return 0;}//这里恶心我好久,如果甚至连long都不能存这个数字(不够长),则直接try catchlong l = 0;try {l = Long.parseLong(result);l = symbol.equals("+") ? Math.min(l, (long) Integer.MAX_VALUE) : Math.max(l, (long) Integer.MIN_VALUE);} catch (Exception e) {//进到这里说明确实存不了这么长的,直接根据符号return对的数字回去return symbol.equals("+") ? Integer.MAX_VALUE : Integer.MIN_VALUE;}//如果try catch块没有异常,说明顺利转成了long,并且经过了三目运算符得到正确值了,可以returnreturn (int)l;}
官方题解
class Solution {public int myAtoi(String str) {Automaton automaton = new Automaton();int length = str.length();for (int i = 0; i < length; ++i) {automaton.get(str.charAt(i));}return (int) (automaton.sign * automaton.ans);}
}class Automaton {public int sign = 1;public long ans = 0;private String state = "start";private Map<String, String[]> table = new HashMap<String, String[]>() {{put("start", new String[]{"start", "signed", "in_number", "end"});put("signed", new String[]{"end", "end", "in_number", "end"});put("in_number", new String[]{"end", "end", "in_number", "end"});put("end", new String[]{"end", "end", "end", "end"});}};public void get(char c) {state = table.get(state)[get_col(c)];if ("in_number".equals(state)) {ans = ans * 10 + c - '0';ans = sign == 1 ? Math.min(ans, (long) Integer.MAX_VALUE) : Math.min(ans, -(long) Integer.MIN_VALUE);} else if ("signed".equals(state)) {sign = c == '+' ? 1 : -1;}}private int get_col(char c) {if (c == ' ') {return 0;}if (c == '+' || c == '-') {return 1;}if (Character.isDigit(c)) {return 2;}return 3;}
}
说实话,看都看不太明白,但是这道题的核心应该是确定一个边界以及正负问题,有机会就去研究一下评论区大神的解法。
时间复杂度忒高了23333
leetcode初级算法6.字符串转整数(atoi)相关推荐
- 【Leetcode】Python实现字符串转整数 (atoi) - 详细备注,保证小白看懂
''' 6 字符串转整数(atoi) 实现 atoi,将字符串转为整数.在找到第一个非空字符之前,需要移除掉字符串中的空格字符.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的 ...
- leetcode算法题--字符串转换整数 (atoi)
原题链接: https://leetcode-cn.com/problems/string-to-integer-atoi/ https://leetcode-cn.com/problems/ba-z ...
- 8. 字符串转换整数 (atoi)(leetcode力扣算法 - java / rust)
8. 字符串转换整数 (atoi): 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAto ...
- c++ 32位有符号的整数_【LeetCode】字符串分类字符串转换整数 (atoi)
" 摘要:本文主要讲述LeetCode字符串分类字符串转换整数 (atoi)解法.主要内容如下: 题目 示例 解题 " 01 - 题目 请你来实现一个 atoi 函数,使其能将字符 ...
- Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历
Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...
- [DFA|有限状态机] leetcode 8 字符串转换整数(atoi)
[DFA|有限状态机] leetcode 8 字符串转换整数(atoi) 1.题目 题目链接 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符, ...
- Leetcode 初级算法 - 数学
Leetcode 初级算法 - 数学 原始地址:https://github.com/jerrylususu/leetcode-easy 二级标题格式:[章节内题号] [题库内题号] [题目标题] 1 ...
- LeetCode初级算法(数组)解答
这里记录了LeetCode初级算法中数组的一些题目: 加一 本来想先转成整数,加1后再转回去:耽美想到测试的例子考虑到了这个方法的笨重,所以int类型超了最大范围65536,导致程序出错. class ...
- 力扣——字符串转换整数 (atoi)
字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAtoi(st ...
最新文章
- enum python_enum:python实现枚举也很优雅
- css对齐 挖坑~
- Linux0.11内核--加载可执行二进制文件之1.copy_strings
- [毕业生的商业软件开发之路]C#语法基础结构
- 小语种nlp文本预处理——数据清洗
- python爬虫怎么爬同一个网站的多页数据-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...
- 【Jmeter】Jmeter java.lang.IllegalAccessError: class com.github.weisj.报错
- Android申请相机权限
- Leftist Heaps
- HTML 邮件兼容问题与解决方案
- 最简单快速合并B站缓存视频和音频(video.m4s,audio.m4s)
- MODIS16天数据月合成/季合成
- 如何将新手引导模块化?答案在此
- 【printf】打印数值、打印二进制、打印十六进制、sprintf
- 数据分析(2)——数据分析的流程 数据类型及数据收集和整理方法
- makefile中wildcard的理解
- Quartz 使用(二) — quartz.properties配置
- pc/mobile前端一键复制粘贴
- hbuilder支持java插件_HBuilder 第三方插件开发
- Codeforces 877 E Danil and a Part-time Job(线段树+dfs序)
热门文章
- P3389 【模板】高斯消元法
- AtCoder 2000 [AGC002F] Leftmost Ball(dp+组合数)
- P4755-Beautiful Pair【笛卡尔树,线段树】
- codeforces1471 D. Strange Definition
- Codeforces Round #666 (Div. 2)
- SpringBoot shedlock MongoDb锁配置
- Java自动化邮件中发送图表(四)之javafx Chart
- 这些分布式事务的解决方案,你都知道吗
- 对Java的URL类支持的协议进行扩展的方法
- 漫画:什么是动态规划?(整合版)