A******g 发帖数: 612 | 1 答案想要的应该是
Space := ('n'|'t'|' ')
Sign := ('-'|'+')
DOT := '.'
Digit := ('0'|...|'9')
NUMBER := Space* Sign? ((Digit Digit* DOT? Digit*)|(Digit* DOT? Digit Digit*
)) (Space* | (E Sign? ((Digit Digit* DOT? Digit*)|(Digit* DOT? Digit Digit*
Space*))))
现场想到这个正则表达式已经不容易,实现起来更是容易出错,因特威儿只要记住几个
容易错的点,基本秒杀了。如到这题是不是只能认命了? |
m*****o 发帖数: 70 | 2 这题始终没搞明白那个table中的状态变换是咋搞的。 |
P***t 发帖数: 1006 | |
u*****o 发帖数: 1224 | 4 这题出现频率怎么样啊? 题不是多难,但情况考虑不全面也总是不对。。 |
c***d 发帖数: 26 | 5 这题似乎不值得用状态机,按顺序检查过去就好。
不过写这么多if/while的确很吐血。。。
还有要事先问清很多情况是否符合,比如e前后可否出现空格
public class Solution {
public boolean isNumber(String s) {
// Start typing your Java solution below
// DO NOT write main() function
if(s==null) return false;
int len = s.length();
int i=0;
boolean isNumber = false;
while(i
if(i
while(i
isNumber = true;
i++;
}
if(i
while(i
isNumber = true;
i++;
}
while(i
if (!isNumber) return false;
if (i>=len) return true;
isNumber=false;
// leetcode OJ doesn't allow space before and after E, so check s.
charAt(i-1)
if(i
i++;
} else {
return false;
}
if(i
while(i
isNumber = true;
i++;
}
// leetcode OJ doesn't allow decimal after E
// if(i
// while(i
// isNumber = true;
// i++;
// }
while(i
return i>=len && isNumber;
}
private boolean isSpace(char ch) {
return ch==' ' || ch=='t';
}
private boolean isSign(char ch) {
return ch=='+' || ch=='-';
}
private boolean isDot(char ch) {
return ch=='.';
}
private boolean isE(char ch) {
return ch=='e' || ch=='E';
}
private boolean isDigit(char ch) {
return '0'<=ch && ch<='9';
}
}
【在 m*****o 的大作中提到】 : 这题始终没搞明白那个table中的状态变换是咋搞的。
|
z*******o 发帖数: 4773 | |