由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 写了一下leetcode上Valid Number,用boolean表示一些状态是不是比较简单
相关主题
leetcode是不是最近有点问题?interleave string 的题目
我觉得valid number其实并不难java 基本问题
用有限状态机写了一下leetcode valid number请教个Amazo的题
秒杀valid number发现valid number真是必杀题
新鲜Amazon面经(附参考答案) 顺便求各种大公司referL二电面据,附面经
求教一个题目,sudoku 下面代码哪里错了。。。L家电面
Leetcode Timeout问一个atoi overflow的问题
Interleave Strings那个题目有O(n)时间 O(1)空间算法么?valid number这道题看到有人用有限状态机做 太牛不敢看
相关话题的讨论汇总
话题: false话题: haspow话题: else话题: return话题: true
进入JobHunting版参与讨论
1 (共1页)
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
4
这道题目要么用正则表达式,一两行的代码,要么是brute force,
下面给出的解法就很简洁:
http://dl.dropbox.com/u/19732851/LeetCode/ValidNumber.html
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
10
这道题目要么用正则表达式,一两行的代码,要么是brute force,
下面给出的解法就很简洁:
http://dl.dropbox.com/u/19732851/LeetCode/ValidNumber.html
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
13
低调哥的这个确实牛!
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 == '.') {

1 (共1页)
进入JobHunting版参与讨论
相关主题
valid number这道题看到有人用有限状态机做 太牛不敢看新鲜Amazon面经(附参考答案) 顺便求各种大公司refer
贴几道某大公司的面试题求教一个题目,sudoku 下面代码哪里错了。。。
C++ Q23: if if elseLeetcode Timeout
有简洁树代码么Interleave Strings那个题目有O(n)时间 O(1)空间算法么?
leetcode是不是最近有点问题?interleave string 的题目
我觉得valid number其实并不难java 基本问题
用有限状态机写了一下leetcode valid number请教个Amazo的题
秒杀valid number发现valid number真是必杀题
相关话题的讨论汇总
话题: false话题: haspow话题: else话题: return话题: true