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)相关推荐

  1. 【Leetcode】Python实现字符串转整数 (atoi) - 详细备注,保证小白看懂

    ''' 6 字符串转整数(atoi) 实现 atoi,将字符串转为整数.在找到第一个非空字符之前,需要移除掉字符串中的空格字符.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的 ...

  2. leetcode算法题--字符串转换整数 (atoi)

    原题链接: https://leetcode-cn.com/problems/string-to-integer-atoi/ https://leetcode-cn.com/problems/ba-z ...

  3. 8. 字符串转换整数 (atoi)(leetcode力扣算法 - java / rust)

    8. 字符串转换整数 (atoi): 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAto ...

  4. c++ 32位有符号的整数_【LeetCode】字符串分类字符串转换整数 (atoi)

    " 摘要:本文主要讲述LeetCode字符串分类字符串转换整数 (atoi)解法.主要内容如下: 题目 示例 解题 " 01 - 题目 请你来实现一个 atoi 函数,使其能将字符 ...

  5. Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历

    Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...

  6. [DFA|有限状态机] leetcode 8 字符串转换整数(atoi)

    [DFA|有限状态机] leetcode 8 字符串转换整数(atoi) 1.题目 题目链接 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符, ...

  7. Leetcode 初级算法 - 数学

    Leetcode 初级算法 - 数学 原始地址:https://github.com/jerrylususu/leetcode-easy 二级标题格式:[章节内题号] [题库内题号] [题目标题] 1 ...

  8. LeetCode初级算法(数组)解答

    这里记录了LeetCode初级算法中数组的一些题目: 加一 本来想先转成整数,加1后再转回去:耽美想到测试的例子考虑到了这个方法的笨重,所以int类型超了最大范围65536,导致程序出错. class ...

  9. 力扣——字符串转换整数 (atoi)

    字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAtoi(st ...

最新文章

  1. enum python_enum:python实现枚举也很优雅
  2. css对齐 挖坑~
  3. Linux0.11内核--加载可执行二进制文件之1.copy_strings
  4. [毕业生的商业软件开发之路]C#语法基础结构
  5. 小语种nlp文本预处理——数据清洗
  6. python爬虫怎么爬同一个网站的多页数据-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...
  7. 【Jmeter】Jmeter java.lang.IllegalAccessError: class com.github.weisj.报错
  8. Android申请相机权限
  9. Leftist Heaps
  10. HTML 邮件兼容问题与解决方案
  11. 最简单快速合并B站缓存视频和音频(video.m4s,audio.m4s)
  12. MODIS16天数据月合成/季合成
  13. 如何将新手引导模块化?答案在此
  14. 【printf】打印数值、打印二进制、打印十六进制、sprintf
  15. 数据分析(2)——数据分析的流程 数据类型及数据收集和整理方法
  16. makefile中wildcard的理解
  17. Quartz 使用(二) — quartz.properties配置
  18. pc/mobile前端一键复制粘贴
  19. hbuilder支持java插件_HBuilder 第三方插件开发
  20. Codeforces 877 E Danil and a Part-time Job(线段树+dfs序)

热门文章

  1. P3389 【模板】高斯消元法
  2. AtCoder 2000 [AGC002F] Leftmost Ball(dp+组合数)
  3. P4755-Beautiful Pair【笛卡尔树,线段树】
  4. codeforces1471 D. Strange Definition
  5. Codeforces Round #666 (Div. 2)
  6. SpringBoot shedlock MongoDb锁配置
  7. Java自动化邮件中发送图表(四)之javafx Chart
  8. 这些分布式事务的解决方案,你都知道吗
  9. 对Java的URL类支持的协议进行扩展的方法
  10. 漫画:什么是动态规划?(整合版)