原始人方法13ms左右

把字符串转换成整数

http://www.nowcoder.com/questionTerminal/1277c681251b4372bdef344468e4f26e

原谅我的山顶洞人的方法

public int StrToInt(String str) {
        if(str == null || str.equals("0") || "".equals(str)){
            return 0;
        }
        char [] strs = str.toCharArray();
        int n = strs.length;

        if(strs.length == 11 || strs.length == 10){
            if(!specialJudge(str)){
                return 0;
            }
        }

        for(int i=0;i<n;i++){
            if(!judge(strs[i],i)){
                return 0;
            }
        }
        if(strs[0]=='-'){
            return -caculate(str);
        }else{
            return caculate(str);
        }

    }
    private boolean specialJudge(String str) {
        boolean flag = true;
        char [] cs;
        if(str.startsWith("-")){
            flag = false;
            cs = str.substring(1,str.length()).toCharArray();
        }else if(str.startsWith("+")){
            cs = str.substring(1,str.length()).toCharArray();
        }else{
            cs = str.toCharArray();
        }
        for (int i = 0; i < cs.length; i++) {
            if (i == 0) {
                if (cs[i] > '2') {
                    return false;
                }
            } else if (i == 1) {
                if (cs[i] > '1') {
                    return false;
                }
            } else if (i == 2) {
                if (cs[i] > '4') {
                    return false;
                }
            } else if (i == 3) {
                if (cs[i] > '7') {
                    return false;
                }
            } else if (i == 4) {
                if (cs[i] > '4') {
                    return false;
                }
            } else if (i == 5) {
                if (cs[i] > '8') {
                    return false;
                }
            } else if (i == 6) {
                if (cs[i] > '3') {
                    return false;
                }
            } else if (i == 7) {
                if (cs[i] > '6') {
                    return false;
                }
            } else if (i == 8) {
                if (cs[i] > '4') {
                    return false;
                }
            } else if (i == 9) {
                if (flag) {
                    if (cs[i] > '7') {
                        return false;
                    }
                } else {
                    if (cs[i] > '8') {
                        return false;
                    }
                }

            }
        }
        return true;
    }
    private int caculate(String str) {
        char [] strs = str.toCharArray();
        if(str.startsWith("+") || str.startsWith("-")){
            strs = str.substring(1, str.length()).toCharArray();
        }
        int sum = 0;
        switch (strs.length) {
        case 10:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 9:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 8:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 7:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 6:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 5:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 4:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 3:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 2:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 1:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        default:
            break;
        }
        return sum;
    }

    private int transfer(char ch){
        if(ch == '0'){
            return 0;
        }else if(ch =='1'){
            return 1;
        }else if(ch =='2'){
            return 2;
        }else if(ch =='3'){
            return 3;
        }else if(ch =='4'){
            return 4;
        }else if(ch =='5'){
            return 5;
        }else if(ch =='6'){
            return 6;
        }else if(ch =='7'){
            return 7;
        }else if(ch =='8'){
            return 8;
        }else{
            return 9;
        }
    }

    private int base(int i) {
        if(i==10){
            return 1000000000;
        }else if(i==9){
            return 100000000;
        }else if(i==8){
            return 10000000;
        }else if(i==7){
            return 1000000;
        }else if(i==6){
            return 100000;
        }else if(i==5){
            return 10000;
        }else if(i==4){
            return 1000;
        }else if(i==3){
            return 100;
        }else if(i==2){
            return 10;
        }else{
            return 1;
        }
    }
    // 可以使用ASCII字符表一个判断结束,但是一般会忘记字符对应ascii可显示数值,所以直接普判
    private boolean judge(char c,int index) {
        if((c == '+' && index==0)||(c == '-' && index==0) || c=='1' || c=='2' || c=='3' || c=='4'|| c=='5'|| c=='6'|| c=='7'|| c=='8'|| c=='9'|| c=='0'){
            return true;
        }else{
            return false;
        }
    }
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-15 17:17
听说过付费实习,没想到这么贵啊我去,要不我给你个腰子吧
哈哈哈,你是老六:这种公司一定要注意啊,不要随便签合同,只要签了后面钱可能回不来,而且你通过法律途径也弄不回
点赞 评论 收藏
分享
程序员小白条:主要没亮点,项目也是网上的,平平无奇,那只能海投了,奖项总得有一些,然后就是现在最好是前后端都会,自己能做项目并且运维的,要么找星球项目改改,要么找个开源项目改改,自己能拓展功能才是主要的,跟做效率很低很低
点赞 评论 收藏
分享
代码飞升:别用口语,后端就写后端,前端就写前端,最后别光后悔
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务