题解 | #字符串转换为数字#
把字符串转换成整数(atoi)
http://www.nowcoder.com/practice/d11471c3bf2d40f38b66bb12785df47f
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ public int StrToInt (String s) { if(s == null || s.length() == 0) { return 0 ; } String temp = s.trim() ; char[] arr = temp.toCharArray() ; StringBuilder sb = new StringBuilder() ; int opt = 0 ;//1负。0正 for(int i = 0 ; i < arr.length ; i ++) { if(i == 0 && (arr[i] == '-' || arr[i] == '+')) {//处理符号 if(arr[i] == '-') { opt = 1 ; } else { opt = 0 ; } continue ; } if(arr[i] >= '0' && arr[i] <= '9') {//拿到符号之后的连续数字 sb.append(arr[i]) ; } else { break ; } } char arr1[] = sb.toString().toCharArray() ;//这些连续数字中可能含前导0 int index = 0 ;//有效数字开始的位置(除去前导零) for( ; index < arr1.length ; index++) { if(arr1[index] != '0') { break ; } } sb = new StringBuilder() ; for(int i = index ;i < arr1.length ; i ++) { sb.append(arr1[i]) ; } arr = sb.toString().toCharArray() ;//arr里面全是有效数字 if(arr.length == 0) {//没有有效数字 return 0 ; }else{ return toint(opt,arr) ;//转换 } } public int toint(int opt , char[] arr) {//辅助函数,将数字串转换位数字 if(arr.length > 10) {//长度大于10直接返回最值 if(opt == 0) { return Integer.MAX_VALUE ; } else { return Integer.MIN_VALUE ; } } else if(arr.length == 10) {//长度等于10,逐位比较,判断是否超过最值 char[] fu = ("2147483648").toCharArray() ;//最值数组 char[] zheng = ("2147483647").toCharArray() ; if(opt == 0) {//正数 for(int i = 0 ; i < arr.length ; i ++) { if(arr[i] > zheng[i]) {//超过最值 return Integer.MAX_VALUE ; } } return legaltoInt(opt ,arr) ; } else {//负数 for(int i = 0 ; i < arr.length ; i ++) { if(arr[i] > fu[i]) {//超过最值 return Integer.MIN_VALUE ; } } return legaltoInt(opt ,arr) ; } } else { return legaltoInt(opt ,arr) ; } } public int legaltoInt(int opt ,char[] arr) {//辅助函数,将不超过最值的数字串转化为数字 int res = 0 ; int base = 1 ; for(int i = arr.length-1 ; i >= 0 ; i --) { res+=(arr[i]-48)*base ; base*=10 ; } if(opt == 0) {//正数 return res ; } else {//负数 return 0-res ; } } }
一个菜鸟的算法刷题记录 文章被收录于专栏
分享一个菜鸟的成长记录