t******d 发帖数: 1383 | 1 做了个望上的测试,结果昨天晚上做了,今天被据了。请刷了poj的看看。 这哪里还有
bug?
跑出来的结果是
the number 007 is a number: false
the number 0.5 is a number: true
the number .01 is a number: true
the number 9. is a number: true
the number 1.000 is a number: true
the number 00.5 is a number: false
the number -.005000 is a number: true
我看着没问题
public class IsNumber {
/**
* The IsNumber function takes a String and returns true if that string
is a number, and false otherwise.
* This implementation, however, has several bugs in ... 阅读全帖 |
|
c***d 发帖数: 26 | 2 这题似乎不值得用状态机,按顺序检查过去就好。
不过写这么多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
isN... 阅读全帖 |
|
s********u 发帖数: 1109 | 3 今天练习了一下,这种应该是最优的了,不用别的数据结构,而且也只用一次遍历:
string process( const string &input){
int begin = 0;
int end = 0;
bool isNumber = true;
char local;
string word;
string res;
for( end = 0; end < input.size(); end++ ){
local = input[end];
if( isdigit( local ) ){
}else if ( local == ' ' || local == ',' || local == '.' ){
word = input.substr(begin, end - begin);
if(isNumber){
res += word;... 阅读全帖 |
|
d********i 发帖数: 582 | 4 请大侠给个java版本的完整代码, Google上找不到。。谢谢了。
我手上的代码按照leetcode写的。但是readNextToken不完整,而且isNumber永远都是
false,郁闷:
public static void serializeBinaryTree(TreeNode node, BufferedWriter out)
throws IOException {
if (node == null) {
out.write("# ");
} else {
out.write(node.val + " ");
serializeBinaryTree(node.left, out);
serializeBinaryTree(node.right, out);
... 阅读全帖 |
|
e**y 发帖数: 784 | 5 格式都坏了,凑合看吧
这是airbnb的电面题
// [123,456,[788,799,833],[[]],10,[]]
// 123->456->788(list)->[](list)->10->(list)
// 799
// 833
class nestedList {
private:
bool isNumber;
list l;
int val;
public:
nestedList(string, int&);
void print();
};
nestedList::nestedList(string s, int& index) {
if(index==s.length()) return;
// object is a number
if(isdigit(s[index])) {
size_t sz;
val=stoi(s.substr(index), &sz);
// cout << "index==" << index << endl;
// cout << "value==" << val << endl;
isNumber=true;... 阅读全帖 |
|
k***t 发帖数: 276 | 6 题目其实很简单,自己摆乌龙了。细节如下。
虽然连on-site都没拿到,个人感觉,作为第一次电面,基本达到操练面试的目的。自
我介绍,项目表达要言简意赅。Coding要冷静,不紧张,确保看清题目,自我检查code
要细。
与大家分享面经/经历。也希望大家给comment。Code是我从collabedit上直接贴过来的
。欢迎comment,帮我提高。谢谢。
一电面:老美。
前半部分是简历上Performance Tuning的各种Projects的细节;
后半部分是Website Performance的各种问题。
基本对答如流,获面试人认同。并说我们网站增长快,急需你这样有Performance方面
经验的人。Highly recommend for the next step.
二电面:老印。题目其实很简单,自己摆乌龙了。
开始讲Projects,老印问了一个简历上Resource Leakage Finding的东西。
回答不够简洁清晰,偏冗长。老印试图澄清,最后彻底澄清。花了一些时间。
后半个小时,两道Coding题:
1。判断string是否数字?如1.2。并写TestCa... 阅读全帖 |
|
p*****2 发帖数: 21240 | 7 ===================================================
//1.2
// -, ., number
bool isNumber (char *in, int n) {
//这个n不需要吧?
bool isSign=false, isDot=false;
//isSign not used?
// skip spaces/tab in the beginning of the string
int first = 0;
if (!in) return false;
// how about in=""?
while (in && in[first] && (in[first]==' ' || in[first]=='\t')) ++first;
//这句怎么那么罗嗦呀?in 不是已经判断了吗?
if (!in[first]) return false;
//这里边判断in[first]就不用在上边判断了吧?
for (int i = first; i < n; ++i ) {
... 阅读全帖 |
|
k***t 发帖数: 276 | 8 谢谢。See //// inline...
===================================================
//1.2
// -, ., number
bool isNumber (char *in, int n) {
//这个n不需要吧?
///// agree, realized but didn't bother to change it.
bool isSign=false, isDot=false;
//isSign not used?
//// realized later but forgot to remove.
// skip spaces/tab in the beginning of the string
int first = 0;
if (!in) return false;
// how about in=""?
//// no special handling is needed.
while (in && in[first] && (in[first]==' ' || in[... 阅读全帖 |
|
l*******b 发帖数: 2586 | 9 写成state machine得有7种状态,5种字符,还不能handle + -空格。。。
val table = Array(Array(0,0,0,0,0), // 0 false
Array(0,2,0,0,7), // 1 numbers eof
Array(0,2,3,5,7), // 2 numbers e . eof
Array(0,4,0,0,0), // 3 numbers
Array(0,4,0,5,7), // 4 numbers e eof
Array(0,6,0,0,0), // 5 numbers
Array(0,6,0,0,7), // 6 numbers eof
Array(7,7,7,7,7)) // 7 true
def isNumber(s: String) = {
def isNumber_helper(index: Int, stat: Int) :Boolean = {
val t... 阅读全帖 |
|
l*******b 发帖数: 2586 | 10 经过很久挣扎终于调成功了。。。test case好诡异
#include
using namespace std;
class Play {
public:
bool isNumber(const char *s) {
int mat[11][7] = {0 ,0 ,0 ,0 ,0 ,0 ,0, // false
0 ,2 ,3 ,0 ,1 ,4 ,0, // 1
0 ,2 ,5 ,6 ,9 ,0 ,10,// 2
0 ,5 ,0 ,0 ,0 ,0 ,0, // 3
0 ,2 ,3 ,0 ,0 ,0 ,0, // 4
0 ,5 ,0 ,6 ,9 ,0 ,10,// 5
0 ,7 ,0 ,0 ,0 ,8 ,0, // 6
... 阅读全帖 |
|
l*******b 发帖数: 2586 | 11 写成state machine得有7种状态,5种字符,还不能handle + -空格。。。
val table = Array(Array(0,0,0,0,0), // 0 false
Array(0,2,0,0,7), // 1 numbers eof
Array(0,2,3,5,7), // 2 numbers e . eof
Array(0,4,0,0,0), // 3 numbers
Array(0,4,0,5,7), // 4 numbers e eof
Array(0,6,0,0,0), // 5 numbers
Array(0,6,0,0,7), // 6 numbers eof
Array(7,7,7,7,7)) // 7 true
def isNumber(s: String) = {
def isNumber_helper(index: Int, stat: Int) :Boolean = {
val t... 阅读全帖 |
|
l*******b 发帖数: 2586 | 12 经过很久挣扎终于调成功了。。。test case好诡异
#include
using namespace std;
class Play {
public:
bool isNumber(const char *s) {
int mat[11][7] = {0 ,0 ,0 ,0 ,0 ,0 ,0, // false
0 ,2 ,3 ,0 ,1 ,4 ,0, // 1
0 ,2 ,5 ,6 ,9 ,0 ,10,// 2
0 ,5 ,0 ,0 ,0 ,0 ,0, // 3
0 ,2 ,3 ,0 ,0 ,0 ,0, // 4
0 ,5 ,0 ,6 ,9 ,0 ,10,// 5
0 ,7 ,0 ,0 ,0 ,8 ,0, // 6
... 阅读全帖 |
|
j*****y 发帖数: 1071 | 13 写了一个,欢迎测试
#include
#include
#include
#include
#include
using namespace std;
bool isNumber(string s)
{
if(s[0] == '+' || s[0] == '-' || s[0] == '(' || s[0] == ')')
{
return false;
}
return true;
}
int helper(int a, int b, char c)
{
if(c == '+')
{
return a + b;
}
else
{
return a - b;
}
}
bool valid(vector &s)
{
stack v;
stack c;
for(int i = 0; i < s.size(); ++i)
... 阅读全帖 |
|
j*****y 发帖数: 1071 | 14 写了一个,欢迎测试
#include
#include
#include
#include
#include
using namespace std;
bool isNumber(string s)
{
if(s[0] == '+' || s[0] == '-' || s[0] == '(' || s[0] == ')')
{
return false;
}
return true;
}
int helper(int a, int b, char c)
{
if(c == '+')
{
return a + b;
}
else
{
return a - b;
}
}
bool valid(vector &s)
{
stack v;
stack c;
for(int i = 0; i < s.size(); ++i)
... 阅读全帖 |
|
g*********8 发帖数: 64 | 15 我觉得一面的那个题目真的在面试里面全部正确很难啊,我写了一个用C++的,楼主给
的测试用例都测了,可能还有bug,望指正:
bool isDigit(char c){
if(c-'0'>=0&&c-'0'<=9) return true;
else return false;
}
bool isNumber(const string& s){
if(s.length()==0) return false;
int i=0;
while(s[i]==' '){i++;}
//trim the leading space
string ss=s.substr(i,s.length()-i);
//Multiple E or e
if(ss.find_first_of('e')!=ss.find_last_of('e')) return false;
if(ss.find_first_of('E')!=ss.find_last_of('E')) return false;
//e shou... 阅读全帖 |
|
g**********y 发帖数: 14569 | 16 用regular expression的版本,pass all tests:
public boolean isNumber(String s) {
return s.matches( "^\\s*[+-]?(\\d*(\\.)?\\d+|\\d+(\\.)?\\d*)(e[+-]?\
\d+)?\\s*$");
}
regular expression看起来复杂,看习惯了之后,不难。在程序里,表达的意思也很简
洁。去读open source, 你会看到用得很普遍。 |
|
w****x 发帖数: 2483 | 17 /*Validate if a given string is numeric.
Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
*/
bool isNumber(const char *s) {
bool bIntNum = false;
int nCurState = 1;
while (true)
{
if (nCurState == 1)
{
while (*s == ' ')
s++;
if (*s == '+' || *s == '-')
s++;
if (*s >= '0' && *s <= ... 阅读全帖 |
|
d******e 发帖数: 164 | 18 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++;
... 阅读全帖 |
|
s*******y 发帖数: 44 | 19 低调哥这个是我见过最简洁的code了。
我也用有限状态机写了一个,画状态机麻烦,code倒是不难写,就是比较繁琐。
bool isNumber(const char *s) {
int state = 0;
while (*s) {
switch (state) {
case 0:
if (*s == ' ') state = 0;
else if (*s == '+' || *s == '-') state = 11;
else if (isdigit(*s)) state = 21;
else if (*s == '.') state = 1;
else return false;
break;
case 1:
... 阅读全帖 |
|
w****x 发帖数: 2483 | 20 /*Validate if a given string is numeric.
Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
*/
bool isNumber(const char *s) {
bool bIntNum = false;
int nCurState = 1;
while (true)
{
if (nCurState == 1)
{
while (*s == ' ')
s++;
if (*s == '+' || *s == '-')
s++;
if (*s >= '0' && *s <= ... 阅读全帖 |
|
s*******y 发帖数: 44 | 21 低调哥这个是我见过最简洁的code了。
我也用有限状态机写了一个,画状态机麻烦,code倒是不难写,就是比较繁琐。
bool isNumber(const char *s) {
int state = 0;
while (*s) {
switch (state) {
case 0:
if (*s == ' ') state = 0;
else if (*s == '+' || *s == '-') state = 11;
else if (isdigit(*s)) state = 21;
else if (*s == '.') state = 1;
else return false;
break;
case 1:
... 阅读全帖 |
|
c******t 发帖数: 1500 | 22 Google “低调哥 isNumber” 就是 |
|
b*******h 发帖数: 53 | 23 求各位大牛指导, 这个题目我扫描整个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 (ch... 阅读全帖 |
|
d******e 发帖数: 164 | 24 贴个我写的:
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++;
... 阅读全帖 |
|
b*******h 发帖数: 53 | 25 求各位大牛指导, 这个题目我扫描整个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 (ch... 阅读全帖 |
|
d******e 发帖数: 164 | 26 贴个我写的:
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++;
... 阅读全帖 |
|
j*****y 发帖数: 1071 | 27 int value(int a, int b, char c)
{
if(c == '+') return a + b;
if(c == '-') return a - b;
if(c == '*') return a * b;
if(c == '/') return a / b;
}
int expression(vector s)
{
if(s.size() == 0)
{
return 0;
}
stack operand;
stack operator;
operand.push(atoi(s.c_str()));
for(int i = 0; i < input.size(); ++i)
{
if(isnumber(s[i][0]))
{
operand.push(atoi(s[i].c_str()));
}
... 阅读全帖 |
|
z*******3 发帖数: 13709 | 28 五个步骤
0)预处理,把输入的string给trim一下,这个适用于任何string作为输入的问题
1)写出is unsigned integer的方法
2)写出is integer的方法,借用步骤1写好的方法,加一个判断是不是+-号开头
3)写出is unsigned double的方法,借用步骤1写好的方法
这里有一个很特殊的corner case,就是.单独出现的情况,其实整个流程就这一个
corner case
4)写出is double的方法,借用步骤3写好的方法
5)然后valid number根据e做切割
e后面必需是integer,用步骤2的方法
e前面必需是double,用步骤4的方法
搞定
看起来很长,其实没啥东西,甚至没有脑筋急转弯的地方,就一个corner case记住就
好了
如果可以自由选择java类库的话,double.parseDouble(String)和integer.parseInt(
String)
加上try catch exception block,简简单单搞定一大串内容
废话说完咯,以下是代码
public class Solution ... 阅读全帖 |
|
s********x 发帖数: 914 | 29 用同样的思路写了一个,没有测,可能有小bug。但应该是只扫一遍。
private static boolean isWhiteSpace(char c) {
if (c == ' ' || c == '\t') {
return true;
}
return false;
}
public static boolean isNumber(String s) {
if (s == null || s.length() == 0) {
throw new IllegalArgumentException();
}
int start = 0, end = s.length() - 1;
// trim
while ((end-1) >= 0 && isWhiteSpace(s.charAt(end))) {
end--;
}
while ((start+1) <= end && isWhiteSpace(s.charAt(start))) {
start++;
}
// ... 阅读全帖 |
|
s********x 发帖数: 914 | 30 if you insist:
public static boolean isNumber(String s) {
if (s == null || s.length() == 0) {
throw new IllegalArgumentException();
}
int start = 0, end = s.length() - 1;
// trim
while ((end-1) >= 0 && isWhiteSpace(s.charAt(end))) {
end--;
}
while ((start+1) <= end && isWhiteSpace(s.charAt(start))) {
start++;
}
// skip beginning + or -
if ((start+1) <= end && s.charAt(start) == '+' || s.charAt(start) == '-') {
start++;
}
start = isInteger(start, end, s);
if (start < 0) {
return false;
}
bool... 阅读全帖 |
|
d******e 发帖数: 164 | 31 抛个砖:
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' && num) {
s++, num = false;
if (*s == '+' || *s == '-') s++;
while (isdigit(*s)) s++, num = true;
}
while (isspace(*s)) s++;
return ... 阅读全帖 |
|
b*****6 发帖数: 179 | 32 我其实已经工作了大半年,最近拿到MS的offer,给的还是fresh grad的标准package。
能因为有8个月的工作经历再多涨点么?ms是我的dream company,离家也近,但是为了
多点钱,是不是要安排amazon之类的面试?recruiter说无法negotiate
这是给转专业的同学们看的,请cs专业的同学略过吧 >__<
先上面经:
第一个人:coding:去string里面的逗号。design:facebook搜名字的search是怎么
design的。对于SDET的难度,就是最肤浅的讨论就过了
第二个人:coding:boolean isNumber(string s),对于test,重要的是test case
第三个人:吃饭,全程没问技术问题,就问了challenge的project是啥,然后开始瞎扯
第四个人:大多数时间讨论我的project和他project的相似度,我们组怎么解决这个问
题 coding:he is a boy => boy a is he ;OOP的概念。
第五个人:语速非常快,我又英语不太好。。。how to test bing se... 阅读全帖 |
|
A*********c 发帖数: 430 | 33 说点个人想法。
先说客观原因,可以安慰一下自己。
第一,我觉得面试招人是个配对排序问题,而不是绝对值问题。你要是恰好碰到一个比
较picky的面试官面了你,
别人碰到了一个比较easy的面试官面了别人,即使你做得很好,还是有可能挂。
第二,确实见过有人把leetcode刷10遍的,那题他就背过了,你在相比之下就是慢了。
关键是看面试官怎么想。
再说主观原因,希望能够良药苦口吧。
第一,我觉得你挂在第一题可能不是因为慢,是不是因为代码质量不够高,比如说不够
简洁,并且在写代码的时候给人感觉思路不够清晰?
第二,我刚才看了了一下IsNumber这个题,如果不考虑E的话,就10行代码,如果思路
清晰,编程熟练,确实可以做到5~10 min bug free。而且也不需要背答案。
我个人的经验,你要想一次AC,关键是要代码短小精悍。代码越短,思路一般就越清晰
,bug也越少。而且速度也越快。我看topcode上的红马甲或者target coder的那些人的
代码,代码极其精炼,而相比之下自己的往往又臭又长。所以顶级coder确实写出的代
码又快又好,我想这就是差距。
和lz共勉。 |
|
b**********y 发帖数: 24 | 34 一直不明白这个solution的transition matrix 是怎么来的
bool isNumber(const char *s) {
int mat[11][7] = {0 ,0 ,0 ,0 ,0 ,0 ,0, // false
0 ,2 ,3 ,0 ,1 ,4 ,0, // 1
0 ,2 ,5 ,6 ,9 ,0 ,10,// 2
0 ,5 ,0 ,0 ,0 ,0 ,0, // 3
0 ,2 ,3 ,0 ,0 ,0 ,0, // 4
0 ,5 ,0 ,6 ,9 ,0 ,10,// 5
0 ,7 ,0 ,0 ,0 ,8 ,0, // 6
0 ,7 ,0 ,0 ,9 ,0 ,10,// 7
0 ,7 ,0 ,0 ,0 ,0 ,0... 阅读全帖 |
|
l****s 发帖数: 75 | 35 看了你原来的代码,改了改。挺好用的。谁还能帮忙再优化一下?
char* skipSpace(const char *s)
{
while (*s == ' ' || *s == 't')
{
++s;
}
return const_cast(s);
}
int getNumDigits(const char *s)
{
int num = 0;
while (*s >= '0' && *s <= '9')
{
++s;
++num;
}
return num;
}
bool isNumber(const char *s)
{
if (!s) return false;
s = skipSpace(s);
if (*s == '+' || *s == ... 阅读全帖 |
|
l****s 发帖数: 75 | 36 少了一行。
class Solution {
private:
void skipSpace(const char *& s)
{
while (*s == ' ' || *s == 't')
{
++s;
}
}
int getNumDigits(const char *s)
{
int num = 0;
while (*s >= '0' && *s <= '9')
{
++s;
++num;
}
return num;
}
public:
bool isNumber(const char *s) {
if (!s) return false;
skipSpace(s);
if (*s == '+' || *s == '-')
{
++s... 阅读全帖 |
|
s**x 发帖数: 7506 | 37 有人找到了代码
bool isNumber(const char *s)
{
if (!s) return false;
s = skipSpace(s);
if (*s == '+' || *s == '-')
{
++s;
}
int n1 = getNumDigits(s);
s += n1;
if (*s == '.')
{
++s;
}
int n2 = getNumDigits(s);
if (n1 + n2 == 0) return false;
s += n2;
if (*s == 'E' || *s == 'e')
{
++s;
if (*s == '+' || *s == '-')
{
... 阅读全帖 |
|
b*****c 发帖数: 16 | 38 好思路,就是程序里if (n2 == 0) return false;那里 是不是应该是n3
附上我按照lz思路写的,leetcode OJ 136ms 通过
bool isNumber(const char *s) {
if (!s) return false;
while (*s == ' ') s++;
if (*s == '+' || *s == '-') s++;
int n1 = 0;
while (isdigit(*s)) {
n1++;
s++;
}
if (*s == '.') s++;
int n2 = 0;
while (isdigit(*s)) {
n2++;
s++;
}
if (n1 + n2 == 0) return false;
if (*s == 'e' || *s =... 阅读全帖 |
|
l****s 发帖数: 75 | 39 我写了一遍。正则的太麻烦了。
还是楼主的思路好!再贴一下:
class Solution {
private:
void skipSpace(const char *& s)
{
while (*s == ' ' || *s == 't')
{
++s;
}
}
int getNumDigits(const char *s)
{
int num = 0;
while (*s >= '0' && *s <= '9')
{
++s;
++num;
}
return num;
}
public:
bool isNumber(const char *s) {
if (!s) return false;
skipSpace(s);
if (*s == '+' || *s == '-')
... 阅读全帖 |
|
l********s 发帖数: 358 | 40 我的秒杀办法:
public boolean isNumber(String s) {
try {
Double.valueOf(s);
return true;
} catch (NumberFormatException e) {
return false;
}
} |
|
w*****j 发帖数: 226 | 41 用自动机写的
求批判
个人觉得自动机的好处是可视化,只要图画对,代码不容易写错
corner case看得也比较清楚
enum State
{
ErrorState
{
@Override
public boolean isValid() { return false; }
},
EndState,
StartState
{
@Override
public State readDigit() { return DigitState; }
@Override
public State readPlus() { return PlusState; }
@Override
public State readMinus() { return MinusState; }
@Override
public State readPoin... 阅读全帖 |
|
s**x 发帖数: 7506 | 42 有人找到了代码
bool isNumber(const char *s)
{
if (!s) return false;
s = skipSpace(s);
if (*s == '+' || *s == '-')
{
++s;
}
int n1 = getNumDigits(s);
s += n1;
if (*s == '.')
{
++s;
}
int n2 = getNumDigits(s);
if (n1 + n2 == 0) return false;
s += n2;
if (*s == 'E' || *s == 'e')
{
++s;
if (*s == '+' || *s == '-')
{
... 阅读全帖 |
|
b*****c 发帖数: 16 | 43 好思路,就是程序里if (n2 == 0) return false;那里 是不是应该是n3
附上我按照lz思路写的,leetcode OJ 136ms 通过
bool isNumber(const char *s) {
if (!s) return false;
while (*s == ' ') s++;
if (*s == '+' || *s == '-') s++;
int n1 = 0;
while (isdigit(*s)) {
n1++;
s++;
}
if (*s == '.') s++;
int n2 = 0;
while (isdigit(*s)) {
n2++;
s++;
}
if (n1 + n2 == 0) return false;
if (*s == 'e' || *s =... 阅读全帖 |
|
l****s 发帖数: 75 | 44 我写了一遍。正则的太麻烦了。
还是楼主的思路好!再贴一下:
class Solution {
private:
void skipSpace(const char *& s)
{
while (*s == ' ' || *s == 't')
{
++s;
}
}
int getNumDigits(const char *s)
{
int num = 0;
while (*s >= '0' && *s <= '9')
{
++s;
++num;
}
return num;
}
public:
bool isNumber(const char *s) {
if (!s) return false;
skipSpace(s);
if (*s == '+' || *s == '-')
... 阅读全帖 |
|
l********s 发帖数: 358 | 45 我的秒杀办法:
public boolean isNumber(String s) {
try {
Double.valueOf(s);
return true;
} catch (NumberFormatException e) {
return false;
}
} |
|
w*****j 发帖数: 226 | 46 用自动机写的
求批判
个人觉得自动机的好处是可视化,只要图画对,代码不容易写错
corner case看得也比较清楚
enum State
{
ErrorState
{
@Override
public boolean isValid() { return false; }
},
EndState,
StartState
{
@Override
public State readDigit() { return DigitState; }
@Override
public State readPlus() { return PlusState; }
@Override
public State readMinus() { return MinusState; }
@Override
public State readPoin... 阅读全帖 |
|
w*****t 发帖数: 485 | 47 shortest version, according to these guidelines and leetcode's offcial codes:
class Solution {
public:
bool isNumber(const char *s) {
if (!s) return false;
while (*s && isblank(*s)) ++s; // preceding spaces
if (*s && ('+' == *s || '-' == *s)) ++s; // preceding +/-
bool ret = false;
for (; *s && isdigit(*s); ret = true, ++s); // integer part
if (*s && '.' == *s) ++s;
for (; *s && isdigi... 阅读全帖 |
|
f*********0 发帖数: 17 | 48 跟我写的基本完全一样啊!
n1+n2==0判断是否valid太赞了!
另外,if,while后面只有一句的到底要不要加花括号啊?
class Solution {
public:
bool isNumber(const char *s) {
while (*s == ' ') s++;
if (*s == '+' || *s == '-') s++;
int n1 = 0;
while (*s <= '9' && *s >= '0') {
n1++;
s++;
}
if (*s == '.') s++;
int n2 = 0;
while (*s <= '9' && *s >= '0') {
n2++;
s++;
}
if (n1+n2 == 0) return false;
if (*s == 'e' || ... 阅读全帖 |
|
p*****p 发帖数: 379 | 49 public class Solution {
int[][] stateTrans = {
{1, 2, 3, -1, -1},
{1, -1, 4, 5, -1},
{1, -1, 3, -1, -1},
{4, -1, -1, -1, -1},
{4, -1, -1, 5, -1},
{7, 6, -1, -1, -1},
{7, -1, -1, -1, -1},
{7, -1, -1, -1, -1}
};
public... 阅读全帖 |
|
s********k 发帖数: 2352 | 50 public boolean isNumber(String s) {
if(s == null || s.trim().isEmpty()){
return false;
}
return s.trim().matches("[-+]?(([0-9]+[.]?[0-9]*)|([.][0-9]+))([E|e][-+]
?[0-9]+)?");
} |
|