博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]--8. String to Integer (atoi)
阅读量:6123 次
发布时间:2019-06-21

本文共 2659 字,大约阅读时间需要 8 分钟。

Implement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

正如题目所说,真的是考虑各种情况。

public int myAtoi(String str) {        if (str == null || str.length() == 0)            return 0;        str = str.trim();        if (str.matches("([0-9]|-|\\+)[0-9]*")) {            if (str.charAt(0) == '+') {                if (str.length() > 11                        || str.length() == 1                        || (str.length() == 11 && !str                                .matches("[+][1-2][0-1][0-4][0-7][0-4][0-8][0-3][0-6][0-4][0-7]")))                    return 0;                else                    return Integer.parseInt(str);            }            if (str.charAt(0) == '-') {                if (str.length() > 11                        || str.length() == 1                        || (str.length() == 11 && !str                                .matches("[-][1-2][0-1][0-4][0-7][0-4][0-8][0-3][0-6][0-4][0-8]"))) {                    return 0;                } else {                    return Integer.parseInt(str);                }            }            if ((str.charAt(0) + "").matches("[0-9]")) {                if (str.length() > 10                        || (str.length() == 10 && !str                                .matches("[1-2][0-1][0-4][0-7][0-4][0-8][0-3][0-6][0-4][0-7]")))                    return 0;                else                    return Integer.parseInt(str);            }        }        return 0;    }

上述程序是我第一次想出来的,基本情况都考虑进去了,还差一种情况没有考虑到:

这里写图片描述

下面这个就考虑到了所有情况,而且效率高很多。

public int myAtoi(String str) {        if (str == null)            return 0;        str = str.trim();        if (str.length() == 0)            return 0;        int index = 0;        int sign = 1;        if (str.charAt(index) == '+') {            sign = -1;            index++;        } else if (str.charAt(index) == '-')            index++;        long num = 0;        for (; index < str.length(); index++) {            System.out.println(str.charAt(index));            if (str.charAt(index) < '0' || str.charAt(index) > '9')                break;            num = num * 10 + (str.charAt(index) - '0');            if (num > Integer.MAX_VALUE)                break;        }        if (num * sign >= Integer.MAX_VALUE)            return Integer.MAX_VALUE;        if (num * sign <= Integer.MIN_VALUE)            return Integer.MIN_VALUE;        return (int) num * sign;    }
你可能感兴趣的文章
Ubuntu下命令行安装jdk,android-studio,及genymotion虚拟机来进行android开发
查看>>
cat命令常用的13个技巧
查看>>
maven--package
查看>>
Vscode 常用快键键速记--mac版
查看>>
pycharm中某些方法被标黄的原因及解决办法
查看>>
DelayQueue的使用
查看>>
陶哲轩实分析习题9.8.5 : 在有理点间断,无理点连续的严格单调函数
查看>>
Elementary Methods in Number Theory Exercise 1.2.4
查看>>
Code Signal_练习题_shapeArea
查看>>
Java系统程序员修炼之道
查看>>
C#中的值类型和引用类型,深拷贝,浅拷贝
查看>>
38.spiderkeeper的配置
查看>>
SQL时间格式化
查看>>
C# Code First 配置
查看>>
Python_selenium之获取当前页面的href属性,id属性,图片信息和截全屏
查看>>
选夫婿1 结构体
查看>>
SQLite - C/C++接口 API(一)
查看>>
秋季学期总结
查看>>
数据库怎么分库分表,垂直?水平?
查看>>
Block 的使用时机
查看>>