原始人方法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; } }