本人新手为了面试互联网公司,将刷题做一个记录以及总结,方便之后学习!!
第18道问题 剑指offer 20为一道中等题
题目:
力扣https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/
1.自己思路
这个题目不是很难看懂,但看了被他的多种限制条件看蒙了,看了“恩”的题解,打开了思路。不得不说,这个人的思维能力很强。
之间我自己想法:先去掉空格,利用一个res=true作为初始条件,如果遇到不满足的请况,直接res变成false输出,但是.与e的个数不好判断,看了这个人的思路,多设置几个判定符号。
num,dot,e的3个判定,减少实际的限定条件。
class Solution {
public boolean isNumber(String s) {
if(s == null ||s.length()==0){
return false;
}
//首先将s去除空格
s = s.trim();
char[] ch = s.toCharArray();
int n = ch.length;
boolean numFlag = false;
boolean dotFlag = false;
boolean eFlag = false;
for (int i = 0; i < n; i++) {
//判定为数字,则标记numFlag
if (ch[i] >= '0' && ch[i] <= '9') {
numFlag = true;
//判定为. 就绝对不能出现e以及另一个点
} else if (ch[i] == '.' && !dotFlag && !eFlag) {
dotFlag = true;
//判定为e,需要没出现过e,并且前面为数字,e前面可以有点
} else if ((ch[i] == 'e' || ch[i] == 'E') && !eFlag && numFlag) {
eFlag = true;
numFlag = false;//为了避免123e这种请求,出现e之后就标志为false
//判定为+-符号,只能出现在第一位或者紧接e后面
} else if ((ch[i] == '+' || ch[i] == '-') && (i == 0 || ch[i-1] == 'e' || ch[i-1] == 'E')) {
//其他情况,其他的字母除了e之外都是非法的
} else {
return false;
}
}
//利用数字的状态,来判定最终的实际状态。
return numFlag;
}
}
结果:
总结:
1.trim()函数,去除空格。
2. 多使用几个boolean的判断标志,能够有效减少语句的应用。
3.情况比较多,多考虑。