第一题:剑指 Offer 20. 表示数值的字符串
问题描述
思路
归纳各种正确的情况
‘.’ 出现正确情况:只出现一次,且在e的前面
‘e’ 出现正确情况:只出现一次,且出现前有数字
‘+’‘-’ 出现正确情况:只能在开头和e后一位
代码
class Solution {
public boolean isNumber(String s) {
int n = s.length();
if(n == 0 || s == null) return false;
s = s.trim();
boolean eflag = false;
boolean numflag = false;
boolean dotflag = false;
for(int i = 0;i < s.length();i++){
if(s.charAt(i) >= '0' && s.charAt(i) <= '9')
numflag = true;
else if((s.charAt(i) == 'e' || s.charAt(i) == 'E' )
&& !eflag && numflag){
eflag = true;
numflag = false;
}
else if(s.charAt(i) == '.' && !dotflag && !eflag)
dotflag = true;
else if((s.charAt(i) == '-' || s.charAt(i) == '+') &&
(i == 0 || s.charAt(i-1) == 'e' || s.charAt(i-1) == 'E')){
}
else return false;
}
return numflag;
}
}
时间空间复杂度
第二题:剑指 Offer 67. 把字符串转换成整数
问题描述
思路
借鉴大佬思路吧(狗头保命)
大佬思路网址
代码
class Solution {
public int strToInt(String str) {
str = str.trim();
if(str.length() == 0) return 0;
char [] ch = str.toCharArray();
int bndry = Integer.MAX_VALUE /10,res=0;
int i = 1, sign = 1;
if(ch[0] == '-') sign = -1;
else if(ch[0] != '+') i = 0;
for(int j=i;j<ch.length;j++){
if(ch[j] < '0' || ch[j] > '9') break;
if(res > bndry || res == bndry && ch[j]>'7')
return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
res = res *10 + (ch[j] - '0');
}
return res * sign;
}
}