Leetcode 8

Leetcode 8

第一次写博客因为也已经大三了,听一个学长的建议开始刷leetcode,楼主编程实力很菜,也就借此来记录一点心路历程,顺便可以监督刷下去。

题目顺序是参考leetcode刷题指南先入门

题目

实现 atoi,将字符串转为整数。

在找到第一个非空字符之前,需要移除掉字符串中的空格字符。如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值。如果第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

字符串可以在形成整数的字符后面包括多余的字符,这些字符可以被忽略,它们对于函数没有影响。

当字符串中的第一个非空字符序列不是个有效的整数;或字符串为空;或字符串仅包含空白字符时,则不进行转换。

若函数不能执行有效的转换,返回 0。

说明:

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。如果数值超过可表示的范围,则返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。

先发一段第一次写的代码

class Solution {
    public int myAtoi(String str) {
        char []str1=str.toCharArray();
        int index=0;
        long res=0L;
        boolean flag=true;
        int length=0;
        for(int i=0;iif(index==i){
                if(str1[i]=='+'||str1[i]=='0'){
                    continue;
                }
                if(str1[i]==' ')
                {
                    index++;
                    continue;
                }
                if(str1[i]=='-'){
                    flag=false;
                    continue;
                }
            }

            if(str1[i]>='0'&&str1[i]<='9'){
                 res=res*10+str1[i]-'0';
            }

            else
                break;

        }


        if(flag==true){
            if(res>Integer.MAX_VALUE)
                res=Integer.MAX_VALUE;
        }else{
            res=-res;
            if(resreturn Integer.MIN_VALUE;
            }
        }

        return (int)res;
    }
}

一开始这个代码没有注意res=res*10+str1[i]-‘0’;中要减去‘0’;
但是这个代码在处理溢出的时候还是会出错

百度了一下解释原因是:
有符号的8字节能表示的最大数是:0x7fffffffffffffff, 转化为十进制就是9223372036854775807,
如果再+1,就会有符号溢出表示为0x8000000000000000,在转为4字节的类型时保留低32位就是0了

解决方法是换成double类型就ok了。。。。

还求大佬不要喷我这个菜鸟

你可能感兴趣的:(算法)