题目信息 解题思路
这是一道中等题,需要判断和考虑的东西很多。我们一一列举出来。 1、需要先去除首位的空字符,这个很容易,用trim()方法就好。 2、如果遇到的第一个非空字符为‘-’或者‘+’时,把后面的数字连接起来。 3、如果遇到的第一个非空字符不是数字或正、负号。就说明是非法的直接返回0 4、越界问题,题目给的环境是int类型的数字其数值范围为 [?231, 231 ? 1],如果越界了就需要返回最大的int值或者最小的int值。
代码和详细注释如下
class Solution{
public int strToInt(String str) {
char []array=str.trim().toCharArray();
if(array.length==0){
return 0;
}
int sign=1;
int res=0;
int i=1;
int limit=Integer.MAX_VALUE/10;
if(array[0]=='-'){
sign=-1;
}
else if(array[0]!='+'){
i=0;
}
for (int j = i; j <array.length ; j++) {
if(array[j]>'9' || array[j]<'0'){
break;
}
if(res>limit ||res==limit&&array[j]>'7'){
return sign==1? Integer.MAX_VALUE:Integer.MIN_VALUE;
}
res = res * 10 + (array[j] - '0');
}
return res*sign;
}
}
如果觉得不错的话,可以看看我的其他题解 怎么把i am a student逆置成student a am i?面试题逆置字符串讲解
三种方法任君挑选 LeetCode_136只出现一次的数字
什么?动态规划10行求出连续子数组的最大和 剑指offer-42讲解
剑指 Offer 39. 数组中出现次数超过一半的数字 简单易懂14行搞定 。人人皆可会
二叉树的层序遍历原理+LeetCode真题练习
LeetCode 24:两两交换链表中的节点,1662. 检查两个字符串数组是否相等
LeetCode 第二十一题
剑指 Offer 58 - II. 左旋转字符串的三种解法一起看看吧!!
字符串“aabcccccaaa”压缩成“a2b1c5a3“还要返回更小的?力扣面试题 01.06. 字符串压缩讲解
|