leetcode-8-字符串转换整数(atoi)
题目描述:
方法一:正则
- import re
- class Solution:
- def myAtoi(self, str: str) -> int:
- INT_MAX = 2149483647
- INT_MIN = -2147483648
- num = re.findall(r'^[\+\-]?\d+',str.lstrip())
- return max(min(int(*num),INT_MAX),INT_MIN)
- class Solution:
- def myAtoi(self, str: str) -> int:
- return max(min(int(*re.findall('^[\+\-]?\d+', str.lstrip())), 2**31 - 1), -2**31)
java版:
- package test;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- class Solution{
- public int myAtoi(String str) {
- str = str.trim();
- Pattern p = Pattern.compile("^[\\+\\-]?\\d+");
- Matcher m = p.matcher(str);
- int value = 0;
- if(m.find()) {
- try {
- value = Integer.parseInt(str.substring(m.start(), m.end()));
- } catch (NumberFormatException e) {
- value = str.charAt(0) == '-'? Integer.MIN_VALUE:Integer.MAX_VALUE;
- }
- }
- return value;
- }
- }
- public class Test {
- public static void main(String[] args) {
- Solution s = new Solution();
- System.out.println(s.myAtoi(" -0456"));
- }
- }
方法二:
思路:
- class Solution:
- def myAtoi(self, str: str) -> int:
- str = str.strip()
- if str == "":
- return 0
- left = 0
- right = 0
- maxi=2147483647
- mini=-2147483648
- if str[0]=="+" or str[0]=="-":
- left = 1
- if(left==1 and len(str)==1) or str[left]<"" or str[right]>"":
- return 0
- for i in range(left,len(str)):
- if str[i]>='' and str[i]<='':
- right = i
- else:
- break
- res = str[left:right+1].lstrip("")
- if len(res)==0:
- return 0
- else :
- res=eval(res)
- if left==1 and str[0]=='-':#判断正负
- res=-res
- if res>maxi:
- return maxi
- elif res<mini:
- return mini
- else :
- return res
方法三:自动机
- INT_MAX = 2147483647
- INT_MIN = -2147483648
- class Automaton:
- def __init__(self):
- self.state = 'start'
- self.sign = 1
- self.ans = 0
- self.table = {
- 'start':['start','signed','in_number','end'],
- 'signed': ['end', 'end', 'in_number', 'end'],
- 'in_number': ['end', 'end', 'in_number', 'end'],
- 'end': ['end', 'end', 'end', 'end'],
- }
- def get_col(self,c):
- if c.isspace():
- return 0
- if c == '+' or c == '-':
- return 1
- if c.isdigit():
- return 2
- return 3
- def get(self,c):
- self.state = self.table[self.state][self.get_col(c)]
- if self.state == 'in_number':
- self.ans = self.ans*10 + int(c)
- self.ans = min(self.ans,INT_MAX) if self.sign == 1 else min(self.ans,-INT_MIN)
- elif self.state == 'signed':
- self.sign = 1 if c == '+' else -1
- class Solution:
- def myAtoi(self, str: str) -> int:
- automaton = Automaton()
- for c in str:
- automaton.get(c)
- return automaton.sign * automaton.a
java版
- class Solution {
- class Automaton {
- final String START = "start";
- final String SIGNED = "signed";
- final String IN_NUM = "in_number";
- final String END = "end";
- String state = START;
- Map<String, String[]> map;
- public int sign = 1;
- public long ans = 0;
- public Automaton() {
- map = new HashMap<>();
- map.put(START, new String[]{START, SIGNED, IN_NUM, END});
- map.put(SIGNED, new String[]{END, END, IN_NUM, END});
- map.put(IN_NUM, new String[]{END, END, IN_NUM, END});
- map.put(END, new String[]{END, END, END, END});
- }
- public int get_col(char c) {
- if (c == ' ') return 0;
- if (c == '+' || c == '-') return 1;
- if (c >= '0' && c <= '9') return 2;
- return 3;
- }
- public void get(char c) {
- state = map.get(state)[get_col(c)];
- if (state.equals(IN_NUM)) {
- ans = ans * 10 + c - '0';
- if (sign == 1) {
- ans = Math.min(ans, Integer.MAX_VALUE);
- } else {
- // -(long)Integer.MIN_VALUE,这个操作有点东西,不然越界
- ans = Math.min(ans, -(long)Integer.MIN_VALUE);
- }
- } else if (state.equals(SIGNED))
- sign = c == '+' ? 1 : -1;
- }
- }
- public int myAtoi(String str) {
- Automaton automaton = new Automaton();
- char[] c = str.toCharArray();
- for (char ch : c) {
- automaton.get(ch);
- }
- return automaton.sign * ((int) automaton.ans);
- }
- }
leetcode-8-字符串转换整数(atoi)的更多相关文章
- 前端与算法 leetcode 8. 字符串转换整数 (atoi)
目录 # 前端与算法 leetcode 8. 字符串转换整数 (atoi) 题目描述 概要 提示 解析 解法一:正则 解法二:api 解法二:手搓一个api 算法 传入测试用例的运行结果 执行结果 G ...
- LeetCode 8. 字符串转换整数 (atoi)(String to Integer (atoi))
8. 字符串转换整数 (atoi) 8. String to Integer (atoi) 题目描述 LeetCode LeetCode8. String to Integer (atoi)中等 Ja ...
- [LeetCode] 8. 字符串转换整数 (atoi)
题目链接:https://leetcode-cn.com/problems/string-to-integer-atoi/ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...
- 每日一题LeetCode 8. 字符串转换整数 (atoi)
问题描述 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将 ...
- LeetCode 8.字符串转换整数 (atoi)(Python3)
题目: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该 ...
- Java实现 LeetCode 8 字符串转换整数(atoi)
8. 字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...
- LeetCode Golang 8. 字符串转换整数 (atoi)
8. 字符串转换整数 (atoi) 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组 ...
- 字符串转换整数 (atoi) C++实现 java实现 leetcode系列(八)
字符串转换整数 (atoi) java实现 C++实现 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当 ...
- 17、字符串转换整数 (atoi)
17.字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...
- 8. 字符串转换整数 (atoi)
8. 字符串转换整数 (atoi) 方法一 import re import math class Solution(object): def myAtoi(self, str): "&qu ...
随机推荐
- JDK8新特性之函数式接口
什么是函数式接口 先来看看传统的创建线程是怎么写的 Thread t1 = new Thread(new Runnable() { @Override public void run() { Syst ...
- MyEclipse中最常用的快捷键大全
1. [ALT+/] 此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类.方法和属性的名字时,多体验一下[ALT+/]快捷键带来的好处吧. 2. [C ...
- selenium3与Python3实战 web自动化测试框架✍✍✍
selenium3与Python3实战 web自动化测试框架 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课 ...
- .Net平台调用の参数对应
具体对应参见官方<----点击此处 C#和C++的互操作性,同行的文章不错,点我跳转 //C++中的DLL函数原型为 //extern "C" __declspec(dll ...
- LVS DR模拟实验
准备多台服务器,现以三台服务器为例第一台做调度器 192.168.200.111[root@localhost ~]# iptables -F[root@localhost ~]# setenforc ...
- 关于windows cmd的一些便捷应用
在同事的指点下,我学会了一种非常方便的进入路径的方法 在windows文件夹中直接打开到要执行的文件的位置,然后在我的电脑那个路径当中输入cmd 之后,cmd的对话框会弹出来,并且显示在当前路径下,这 ...
- 将一个压缩文件分成多个压缩文件;RAR文件分卷
有时候需要上传压缩文件,但是限制了单个文件的大小,那我们怎么才能将一个比较大的压缩文件分割成多个压缩文件,从而符合要求的进行文件的上传呢?这里小编告诉你一个技巧. 工具/原料 电脑 winrar(一般 ...
- python pathlib模块详解
python pathlib模块详解
- ajax-jq
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 泛型(Generic)类的使用原因和使用方式
我们每个苹果都套个盒子,给每本书都套个盒子,但是苹果盒子和书盒子是不同的, 这样下去如果有更多的东西需要套盒子,1000种产品有1000种相应的盒子,造成类型极度膨胀非常难以维护. class Pro ...