b*******h 发帖数: 53 | 1 求各位大牛指导, 这个题目我扫描整个string。用boolean表示当前的状态, 每个
char可以看之前的状态进行判断,逻辑上是不是比较清楚一点。贴上代码:
public boolean isNumber(String s) {
s = s.trim();
if(s.length() == 0) return false;
if(s.charAt(0) == '+' || s.charAt(0)=='-') return isNum(s.substring(
1,s.length()));
else return isNum(s);
}
public boolean isNum(String s){
boolean hasInteger = false, hasDot = false, hasDecimal = false,
hasPow = false, hasSign = false, hasExponent = false;
for (char c: s.toCharArray()){
if(c<='9' && c>='0') {
if(!hasInteger) hasInteger = true;
else if(hasDot && !hasPow && !hasDecimal) hasDecimal = true;
else if(hasPow && !hasExponent) hasExponent = true;
}
else if (c=='.') {
if(!hasDot && !hasPow) {hasDot = true;}
else return false;
}
else if(c=='e') {
if(hasInteger && !hasPow) {hasPow = true;}
else return false;
}
else if (c=='+' || c=='-') {
if(hasPow && !hasSign && !hasExponent) hasSign = true;
else return false;
}
else return false;
}
if((hasInteger|| (hasDot && hasDecimal)) && (hasPow == hasExponent))
return true;
else return false;
} |
j*****y 发帖数: 1071 | 2 我也差不多和你的一样的思路,不过写了 140行代码, 呵呵
substring(
【在 b*******h 的大作中提到】 : 求各位大牛指导, 这个题目我扫描整个string。用boolean表示当前的状态, 每个 : char可以看之前的状态进行判断,逻辑上是不是比较清楚一点。贴上代码: : public boolean isNumber(String s) { : s = s.trim(); : if(s.length() == 0) return false; : if(s.charAt(0) == '+' || s.charAt(0)=='-') return isNum(s.substring( : 1,s.length())); : else return isNum(s); : } :
|
w****x 发帖数: 2483 | 3
substring(
其实这题因该先画状态图,然后根据图硬写逻辑
【在 b*******h 的大作中提到】 : 求各位大牛指导, 这个题目我扫描整个string。用boolean表示当前的状态, 每个 : char可以看之前的状态进行判断,逻辑上是不是比较清楚一点。贴上代码: : public boolean isNumber(String s) { : s = s.trim(); : if(s.length() == 0) return false; : if(s.charAt(0) == '+' || s.charAt(0)=='-') return isNum(s.substring( : 1,s.length())); : else return isNum(s); : } :
|
h****e 发帖数: 928 | |
d******e 发帖数: 164 | 5 贴个我写的:
bool isNumber(const char *s) {
while (isspace(*s)) s++;
if (*s == '+' || *s == '-') s++;
bool num = false;
while (isdigit(*s)) {
s++;
num = true;
}
if (*s == '.') {
s++;
while (isdigit(*s)) {
s++;
num = true;
}
}
if (*s == 'e') {
if (!num) return false;
s++;
if (*s == '+' || *s == '-') s++;
num = false;
while (isdigit(*s)) {
s++;
num = true;
}
}
while (isspace(*s)) s++;
if (!*s) return num;
return false;
}
【在 h****e 的大作中提到】 : 这道题目要么用正则表达式,一两行的代码,要么是brute force, : 下面给出的解法就很简洁: : http://dl.dropbox.com/u/19732851/LeetCode/ValidNumber.html
|
j*****y 发帖数: 1071 | 6 nice. thanks.
【在 d******e 的大作中提到】 : 贴个我写的: : bool isNumber(const char *s) { : while (isspace(*s)) s++; : if (*s == '+' || *s == '-') s++; : bool num = false; : while (isdigit(*s)) { : s++; : num = true; : } : if (*s == '.') {
|
b*******h 发帖数: 53 | 7 求各位大牛指导, 这个题目我扫描整个string。用boolean表示当前的状态, 每个
char可以看之前的状态进行判断,逻辑上是不是比较清楚一点。贴上代码:
public boolean isNumber(String s) {
s = s.trim();
if(s.length() == 0) return false;
if(s.charAt(0) == '+' || s.charAt(0)=='-') return isNum(s.substring(
1,s.length()));
else return isNum(s);
}
public boolean isNum(String s){
boolean hasInteger = false, hasDot = false, hasDecimal = false,
hasPow = false, hasSign = false, hasExponent = false;
for (char c: s.toCharArray()){
if(c<='9' && c>='0') {
if(!hasInteger) hasInteger = true;
else if(hasDot && !hasPow && !hasDecimal) hasDecimal = true;
else if(hasPow && !hasExponent) hasExponent = true;
}
else if (c=='.') {
if(!hasDot && !hasPow) {hasDot = true;}
else return false;
}
else if(c=='e') {
if(hasInteger && !hasPow) {hasPow = true;}
else return false;
}
else if (c=='+' || c=='-') {
if(hasPow && !hasSign && !hasExponent) hasSign = true;
else return false;
}
else return false;
}
if((hasInteger|| (hasDot && hasDecimal)) && (hasPow == hasExponent))
return true;
else return false;
} |
j*****y 发帖数: 1071 | 8 我也差不多和你的一样的思路,不过写了 140行代码, 呵呵
substring(
【在 b*******h 的大作中提到】 : 求各位大牛指导, 这个题目我扫描整个string。用boolean表示当前的状态, 每个 : char可以看之前的状态进行判断,逻辑上是不是比较清楚一点。贴上代码: : public boolean isNumber(String s) { : s = s.trim(); : if(s.length() == 0) return false; : if(s.charAt(0) == '+' || s.charAt(0)=='-') return isNum(s.substring( : 1,s.length())); : else return isNum(s); : } :
|
w****x 发帖数: 2483 | 9
substring(
其实这题因该先画状态图,然后根据图硬写逻辑
【在 b*******h 的大作中提到】 : 求各位大牛指导, 这个题目我扫描整个string。用boolean表示当前的状态, 每个 : char可以看之前的状态进行判断,逻辑上是不是比较清楚一点。贴上代码: : public boolean isNumber(String s) { : s = s.trim(); : if(s.length() == 0) return false; : if(s.charAt(0) == '+' || s.charAt(0)=='-') return isNum(s.substring( : 1,s.length())); : else return isNum(s); : } :
|
h****e 发帖数: 928 | |
d******e 发帖数: 164 | 11 贴个我写的:
bool isNumber(const char *s) {
while (isspace(*s)) s++;
if (*s == '+' || *s == '-') s++;
bool num = false;
while (isdigit(*s)) {
s++;
num = true;
}
if (*s == '.') {
s++;
while (isdigit(*s)) {
s++;
num = true;
}
}
if (*s == 'e') {
if (!num) return false;
s++;
if (*s == '+' || *s == '-') s++;
num = false;
while (isdigit(*s)) {
s++;
num = true;
}
}
while (isspace(*s)) s++;
if (!*s) return num;
return false;
}
【在 h****e 的大作中提到】 : 这道题目要么用正则表达式,一两行的代码,要么是brute force, : 下面给出的解法就很简洁: : http://dl.dropbox.com/u/19732851/LeetCode/ValidNumber.html
|
j*****y 发帖数: 1071 | 12 nice. thanks.
【在 d******e 的大作中提到】 : 贴个我写的: : bool isNumber(const char *s) { : while (isspace(*s)) s++; : if (*s == '+' || *s == '-') s++; : bool num = false; : while (isdigit(*s)) { : s++; : num = true; : } : if (*s == '.') {
|
s*********s 发帖数: 318 | |
B*****7 发帖数: 137 | 14 牛,orz
【在 d******e 的大作中提到】 : 贴个我写的: : bool isNumber(const char *s) { : while (isspace(*s)) s++; : if (*s == '+' || *s == '-') s++; : bool num = false; : while (isdigit(*s)) { : s++; : num = true; : } : if (*s == '.') {
|