题解 | #把字符串转换成整数(atoi)#
把字符串转换成整数(atoi)
https://www.nowcoder.com/practice/d11471c3bf2d40f38b66bb12785df47f
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ public int StrToInt (String s) { int a = Integer.MIN_VALUE / 10; int b = Integer.MIN_VALUE % 10; int neg = 0; int cur = 0; for(int i=0; i<s.length(); i++) { char c = s.charAt(i); if(c == ' ' && cur == 0 && neg == 0) { continue; } if(c == '-' && neg == 0) { neg = 1; } else if(c == '+' && neg == 0) { neg = 2; } else if(c >= '0' && c <= '9') { if(neg == 0) { neg = 2; } int tmp = '0' - c; if(cur < a || (cur == a && tmp < b)) { return neg == 1 ? Integer.MIN_VALUE : Integer.MAX_VALUE; } else { cur = cur * 10 + tmp; } } else { break; } } if(cur == Integer.MIN_VALUE) { return neg == 1 ? Integer.MIN_VALUE : Integer.MAX_VALUE; } return neg == 2 ? -cur : cur; } }
解题思想:拆解字符串的各种情况
* 这道题的思路相对⽐较直观,⾸先需要判定输⼊的字符串是否不为空且有效,否则返
* 回 0 。如果是有效字符串,初始化结果 result 为0, biggerThanZero 表示是否⼤于
* 0,默认是 true ,也就是正数。
* 遍历每⼀位,如果 i 是 0 ,且是“ + ”,说明是符号位,直接 continue ,如果 i 为0,
* 且字符为“ - ”,说明是符号位且为负数,其他的,判断字符是否在 0~9 之间,也就
* 是 str.charAt(i) - '0' >= 0 && '9' - str.charAt(i) >= 0 ,如果符合条件,
* 则将之前的 result 乘以 10 ,加上当前字符所表示的数字。如果不符合条件,说明是
* ⾮法的字符串,直接返回即可。
#算法##算法笔记#