题目
描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
返回值描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入:
"+2147483647"
复制
返回值:
2147483647
解题思路 时间复杂度O(n) ,空间复杂度O(1)
- 字符串前面会有+-号,可以暂时不管,如果为-号最后结果乘上-1即可
- 接下来只要判断字符是否是数字,如果是数字就为合法字符,如果不为数字直接返回0
- 每次向后移动一位,那么意味着上次得到的数字需要乘以10
public static int StrToInt(String str) { long result = 0; // 正负号标志 Character sign = null; for (int i = 0 ; i < str.length() ; i++){ char item = str.charAt(i); // 判断是否是数字 if (Character.isDigit(item)){ result += str.charAt(i) - 48; // 整体乘以10 result*=10; }else if (item == '-' || item == '+'){ sign = item; }else { return 0; } } // 如果符号位为- if (sign != null && sign.equals('-')){ return (int)(result/10*-1); }else { return (int)(result/10); } }