题目描述
老阅读题了,感觉这道题有点类似写业务接口。
思路 && 代码
首先,把情况划分一下: 非正常值,直接给 0(这个实际上可以划分到2的代码中) 可取正常值的情况 溢出的情况(上溢 && 下溢) 然后,分情况逐个写即可
class Solution { public int strToInt ( String str) { char [ ] strArr = str. trim ( ) . toCharArray ( ) ; if ( strArr. length == 0 ) { return 0 ; } int ans = 0 ; int index = 0 ; boolean isNegative = false ; if ( strArr[ 0 ] == '-' || strArr[ 0 ] == '+' ) { index++ ; isNegative = ( strArr[ 0 ] == '-' ) ; } for ( ; index < strArr. length && strArr[ index] >= '0' && strArr[ index] <= '9' ; index++ ) { if ( isNegative) { if ( ans > 214748364 || ( ans == 214748364 && strArr[ index] > '8' ) ) { return - 2147483648 ; } } else if ( ans > 214748364 || ( ans == 214748364 && strArr[ index] > '7' ) ) { return 2147483647 ; } ans *= 10 ; ans += strArr[ index] - '0' ; } if ( isNegative) { ans *= - 1 ; } return ans; }
}
二刷
class Solution { public int strToInt ( String str) { char [ ] arr = str. trim ( ) . toCharArray ( ) ; if ( arr. length == 0 ) { return 0 ; } int isNegative = arr[ 0 ] == '-' ? 1 : 0 ; int ans = 0 ; if ( arr[ 0 ] >= '0' && arr[ 0 ] <= '9' ) { ans = arr[ 0 ] - '0' ; } else if ( arr[ 0 ] != '+' && arr[ 0 ] != '-' ) { return ans; } for ( int i = 1 ; i < arr. length; i++ ) { if ( arr[ i] < '0' || arr[ i] > '9' ) { break ; } if ( ( ans > 214748364 ) || ( ans == 214748364 && arr[ i] - '0' > 7 + isNegative) ) { ans = isNegative == 1 ? Integer . MIN_VALUE : Integer . MAX_VALUE; break ; } ans *= 10 ; ans += arr[ i] - '0' ; } return isNegative == 1 ? - 1 * ans : ans; }
}