javascript - 新手关于leetcode 8的问题,charAt()的问题,已经卡了一晚上了 求解
天蓬老师
天蓬老师 2017-04-11 09:10:10
0
1
423

目的是实现将string转换成integer,如果输入+99,则输出为99,;如果输入-99,则输出为-99,且考虑溢出。
public class Solution {

public int myAtoi(String str) {
    
    long result = 0;
    
    if(str == null || str.length()<=0)
        return 0;
    
    String newstr = str.trim();
    
    if(newstr.charAt(0) == '+'){
        for(int i=0;i<newstr.length();i++) {
            if (Character.isDigit(newstr.charAt(i)))
                result = result*10 + (newstr.charAt(i) - '0');
            else 
                break;
        }
        if (result > Integer.MAX_VALUE)
            return Integer.MAX_VALUE;
        else 
            return (int)result;
        
    }
        
    else if (newstr.charAt(0) == '-'){
        for(int i=0;i<newstr.length();i++) {
            if (Character.isDigit(newstr.charAt(i)))
                result = result*10 + (newstr.charAt(i) - '0');
            else 
                break;
        }

        result = result*-1;
        if (result < Integer.MIN_VALUE)
            return Integer.MIN_VALUE;
        else 
            return (int)result;
    }     
    
    else if (Character.isDigit(newstr.charAt(0))){
        for(int i=0;i<newstr.length();i++) {
            if (Character.isDigit(newstr.charAt(i)))
                result = result*10 + (newstr.charAt(i) - '0');
            else 
                break; 
        }
        if (result > Integer.MAX_VALUE)
            return Integer.MAX_VALUE;
        else 
            return (int)result;
    }
    else 
        return 0;
}

}

我的代码如上图,为什么我输入+1100这种格式的数字后,输出仍旧是0?小弟新手刷lc,这道题已经卡了一晚上了,求解

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

répondre à tous(1)
PHPzhong

for (int i = 0; i < newstr.length(); i++)应该改成for (int i = 1; i < newstr.length(); i++), 因为按照你的描述,下标为0的字符应该是+或者-

public class Solution {
    public int atoi(String str) {
        if (str == null || str.length() <= 0)
            return 0;

        long rs = 0;
        char[] chArr = str.trim().toCharArray();
        boolean isPositive = chArr[0] == '+' || Character.isDigit(chArr[0]);
        int start = Character.isDigit(chArr[0]) ? 0 : 1;
        for (; start < chArr.length; start++) {
            if (Character.isDigit(chArr[start]))
                rs = rs * 10 + (chArr[start] - '0');
        }
        rs = isPositive ? rs : -rs;
        if (isPositive)
            return rs > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) rs;
        else
            return rs < Integer.MIN_VALUE ? Integer.MIN_VALUE : (int) rs;
    }

    public static void main(String[] args) {
        System.out.println(new Solution().atoi("-1100"));
    }
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal