LeetCode题解-字符串转数字-Java

简介: 字符串转数字题解,Java版

字符串转数字,这是个很有趣的题目。下面是我的解答,改了好几遍才通过。

class Solution {
   
    public static int myAtoi(String str) {
   
        //如果该字符串第一个字符非有效整数字符、串为空、仅包含空白 返回0
        if(str.isEmpty()) return 0;
        if(str.indexOf(".")!=-1) {
   
            if(str.indexOf(".")==0)return 0;
            str=str.substring(0, str.indexOf("."));
        }
        str=str.trim();
        char[] charArray = str.toCharArray();
        //转换
        int strlength = str.length();
        if(strlength==0)return 0;
        int point=0;
        int sign =-1;
        //开存储空间
        StringBuilder sbu = new StringBuilder(str.length());
        //判断第一位是否为为数符,且不是小数点
        if(isPlusOrMinusSign(charArray[point])||isNumber(charArray[point])){
   
            //若第一位位数符,则置标志位为0
            if(isPlusOrMinusSign(charArray[point])==true) sign=0;
            sbu.append(charArray[point++]);
        }else {
   
            return 0;
        }
        //获取有效值
        while(point<strlength&&isNumber(charArray[point])) {
   
            sbu.append(charArray[point]);
            point++;
        }
        if(sign==0)while(sbu.indexOf("0")==1) sbu.deleteCharAt(sbu.indexOf("0"));
        else while(sbu.indexOf("0")==0) sbu.deleteCharAt(sbu.indexOf("0"));
         if(sbu.length()==0)return 0;
        //delete(sbu.indexOf("0"));
        if(sbu.length()>11) {
   
            if(sbu.charAt(0) == 45) {
   
                return -2147483648;
            }
            return 2147483647;
        }
        if(sbu.length()==1&&sign==0) {
   
            return 0;
        }
        long info = 0;
        info = Long.parseLong(sbu.toString());
        if(info > 2147483647) {
   
            return 2147483647;
        }
        if(info < -2147483648) {
   
            return -2147483648;
        }
        return (int)info;
        //如果转换后的结果越界 返回0 | 2147 4836 47 -2147 4836 48
    }
    public static boolean isNumber(char info) {
   
        return info>=48&&info<=57;
    }

    public static boolean isPlusOrMinusSign(char info) {
   
        if(info==43||info==45) {
   
            return true;
        }
        return false;
    }
}

可以参考看看,效率不高。

目录
相关文章
|
21天前
|
Java
Java 字符串分割split空字符串丢失解决方案
Java 字符串分割split空字符串丢失解决方案
|
19天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
20小时前
|
存储 Java C语言
【Java探索之旅】数据类型与变量 浮点型,字符型,布尔型,字符串型
【Java探索之旅】数据类型与变量 浮点型,字符型,布尔型,字符串型
8 0
|
1天前
|
Java
JAVA刷题之字符串的一些个人思路
JAVA刷题之字符串的一些个人思路
|
4天前
|
缓存 安全 Java
【Java基础】String、StringBuffer和StringBuilder三种字符串对比
【Java基础】String、StringBuffer和StringBuilder三种字符串对比
6 0
|
11天前
|
算法
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
22 1
|
11天前
|
Java
java 数组转字符串 和字符串转int
【4月更文挑战第11天】java 数组转字符串 和字符串转int
13 2
|
11天前
|
Java
java判断字符串中有多少数字字母或者符号
java判断字符串中有多少数字字母或者符号
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
15天前
|
存储 Java C++
leetcode 2525 根据规则将箱子分类 c++ pyhton java c题解
leetcode 2525 根据规则将箱子分类 c++ pyhton java c题解
14 1

热门文章

最新文章